第二章 数据的存储与检索(2)

重点:

  • 知道何时读完文件:feof() 函数
  • 每次读取一行数据:fgets() 、fgetss() 、fgetcsv() 函数
  • 读取整个文件:readfile() 、fpassthru() 、file() 函数
  • 读取一个字符:fgetc() 函数
  • 读取任意长度:fread() 函数
  • 查看文件是否存在:file_exists() 函数
  • 确定文件大小:filesize() 函数
  • 删除一个文件:unlink() 函数
  • 在文件中定位:rewind() 、fseek() 、ftell() 函数
  • 文件锁定:flock() 函数(前一篇已讲)

先放一个读文件的示例:程序清单2-3 vieworder.php——用来查看订单文件的员工界面

<?php
//create short variable name
$DOCUMENT_ROOT = $_SERVER[‘DOCUMENT_ROOT‘];
?>
<html>
<head>
    <title>BOb‘s Auto Parts - Customer Orders</title>
</head>
<body>
    <h1>Bob‘s Auto Parts</h1>
    <h2>Customer Orders</h2>
    <?php
    //open the file(orders.txt) ; "rb" means "only can read"
    @$fp = fopen("$DOCUMENT_ROOT/../orders.txt",‘rb‘);
    //lock file for reading
    flock($fp, LOCK_SH);

    //judge the file is full or not
    if(!$fp){
        echo "<p><strong>No orders pending. Please try again later.</strong></p>";
        exit;
    }

    //judge when the file go to the end
    while(!feof($fp)){
        $order = fgets($fp,999);
        //read one line of content from this file each time, it will stop when counter a "\n" or "EOF" or 998B
        echo $order."<br />";
    }

    echo "Final position of the file pointer is:".(ftell($fp));
    echo "<br />";
    rewind($fp);
    echo "After rewind, the position is:".(ftell($fp));
    echo "<br />";

    //release the file
    flock($fp,LOCK_UN);
    fclose($fp);
    ?>
</body>
</html>

然后我逐行分析:

    while(!feof($fp)){
        $order = fgets($fp,999);
        //read one line of content from this file each time, it will stop when counter a "\n" or "EOF" or 998B
        echo $order."<br />";
    }

   这里使用了功能为“每次读取一行数据”的fgets()函数,和功能为“判断何时读完文件”的feof()函数,

   先介绍这段代码的意思:利用while循环,当文件指针fp没有到达文件末尾时,每次读取一行,当文件指针读取到"\n"/"EOF"/998B时,在vieworder.php界面上打印一个换行。

   小小的TIP:

      • Web浏览器不会表示空格,例如新航,因此我们最好用HTML中的换行符<br />替换文本中的行结束符。
      • 999:这里是可读取的最大长度为指定的长度(我们自己按实际情况规定)减去1B,即998B。
  • feof() 函数:测试文件指针是否到了文件结束的位置——bool feof(resource $handle)

       handle:表示文件指针,本例中的handle是"$fp"。

       如果该文件指针指向了文件末尾,feof()函数将返回true。

       foef ==File End Of File 。

  • 每次读取一行数据:fgets() 、fgetss() 、fgetcsv() 函数

      • fgets() :从文件指针中每次读取一行内容——string fgets(resource $handle [, int $length])

            handle:文件指针是必须的,必须指向由fopen()或fsockopen()成功打开的文件(并还未由fclose()关闭)

            length:从handle指向的文件中读取一行并返回长度最多为 length - 1 字节的字符串。碰到换行符(包括在返回值中)、EOF 或者

                 已经读取了 length - 1 字节后停止(看先碰到那一种情况)。如果没有指定 length,则默认为 1K,或者说 1024 字节。

      • fgetss():从文件指针中读取一行并过滤掉HTML标记——string fgets(resource $handle [, int $length [, string $allowable_tags ]]) 

            allowable_tags:可选的第三个参数指定哪些标记不被去掉 

      • fgetcsv():从文件指针中读入一行并解析CSV字段——array fgetcsv ( resource $handle [, int $length = 0 [, string $delimiter = ‘,‘ [, string$enclosure = ‘"‘ [, string $escape = ‘\\‘ ]]]] )

            delimiter:设置字段分界符(只允许一个字符)

            enclosure:设置字段环绕符(只允许一个字符)

            escape:设置转义字符(只允许一个字符),默认是一个反斜杠

            返回包含读取字段的索引数组

 

    echo "Final position of the file pointer is:".(ftell($fp));
    echo "<br />";
    rewind($fp);
    echo "After rewind, the position is:".(ftell($fp));
    echo "<br />";

  这里使用了功能为“在文件中定位”的ftell()函数和rewind()函数,

  先介绍这段代码的意思:打印出文件指针最后的位置--换行--将文件指针复位到文件的开始--打印复位后,指针的位置--换行

  • 在文件中定位:rewind() 、fseek() 、ftell() 函数

      • rewind():倒回文件指针的位置(即将handle的文件位置设为文件流的开头)——bool rewind(resource $handle)
      • fseek():在文件指针中定位——int fseek ( resource $handle , int $offset [, int $whence = SEEK_SET ] )

            offest:偏移量。要移动到文件尾之前的位置,需要给offset传递一个负值,并设置whence为SEEK_END。

            whence:

              【1】SEEK_SET-设定位置等于offset字节

              【2】SEEK_CUR-设定位置为当前位置加上offset

              【3】SEEK_END-设定位置为文件尾加上offest

      • ftell():返回文件指针读/写的位置——int ftell ( resource $handle )           

            

时间: 2024-10-26 03:56:54

第二章 数据的存储与检索(2)的相关文章

第二章 数据的存储与检索(1)2.1—2.4节

学习重点: 保存数据以便后期使用 打开文件 创建并写入文件 关闭文件 读文件 给文件加锁 删除文件 其他有用的文件操作函数 数据库管理系统 存储和检索Bob的订单: html文件:文件名(orderform.html) <html> <head> <title>Bob's Auto Parts</title> </head> <body> <h1>Bob's Auto Parts</h1> <h2>

第2章 数据的存储与检索

1.打开文件: fopen() ; 如:$fp=fopen("$DOCUMENT_ROOT/../orders/orders.txt",'w'); //第一个参数:要打开的文件(以上是相对路径) // 第二个参数:指定文件模式,即将对文件进行的操作(字符串w指 只写模式) 2.写文件:fwrite()或fputs() 如:fwrite($fp,$outputstring,strlen($outputstring)); //第三个参数规定写入的最大字符数,该参数是可选的 3.关闭文件:f

第二章 数据,变量和计算

头文件 #include <>或#include "" <> 强制类型转换 double a=1.6; cout<<static_cast<int>(a)<<endl; 输出为1 注意旧的强制类型转换为int(a),这比新的更容易出错,得不到想要的结果,所以推荐static_cast<转换成的类型>() 自动判断数据类型 auto n=16; 自动判断n的类型为int const auto e=1.1; 自动判断静

第二章 数据是用二进制表示的

看完第二章后,我知道了计算机是以二进制来存储数据的(其实标题已经告诉我们了).以至于计算机为什么用二进制来表示的,是因为计算机内部是由集成电路这种电子部件构成的,它们的所有引脚的每个引脚只有两种状态,就是0V和5V, 二进制数是只有0和1,它们之间的特性很相似. 还有字节(Byte)与位(bit)两者的关系,字节是计算机处理信息的基本单位,而位是最小单位(1字节=8位).还有就是用二进制数表示的数值,计算机不会区分它是数值.文字还是图片等,而是根据编写的各位对计算机发出的指示来进行信息的处理的.

【知识强化】第二章 数据的表示和运算 2.2 定点数的表示与运算

我们进入第二章的学习,就是定点数的表示和运算. 那关于定点数呢我们分为两块内容,一块呢就是定点数的表示也就是我们这一节的内容,一块呢就是定点数的运算.这两块内容呢都非常的难,也都非常的重点.希望大家呢引起重视. 原文地址:https://www.cnblogs.com/ZHONGZHENHUA/p/11370240.html

高性能javascript(第二章 数据访问)

1.数据存储位置关系到访问速度.在 JavaScript 中有四种基本的数据访问位置: 直接量: 变量: 数组: 对象: 2.多数情况下,对一个直接量和一个局部变量数据访问的性能差异是微不足道的. 3.作用域和标示符解析: 每一个 JavaScript 函数都被表示为对象.进一步说,它是一个函数实例.函数对象正如其他对象那样, 拥有你可以编程访问的属性,和一系列不能被程序访问,仅供 JavaScript 引擎使用的内部属性. 其中一个内部属性是[[Scope]],由ECMA-262 标准第三版定

KnockoutJS 3.X API 第二章 数据监控(1)视图模型与监控

数据监控 KO的三个内置核心功能: 监控(Observable)和依赖性跟踪(dependency tracking) 声明绑定(Declarative bindings) 模板(Templating) 在这个页面上,您将了解三种核心功能的第一种.但在此之前,让我们来看看MVVM模式的概念和视图模型的概念. MVVM模式和视图模型 模型-视图-视图模型(MVVM)是用于构建用户界面的设计模式.它描述了如何将复杂的UI分割成三个部分: 模型:应用程序所存储的数据.这个数据代表了你的业务领域对象和操

《数据挖掘:R语言实战》第二章 数据概览

2.1 n*m数据集 在n*m表格形式的数据集中,n代表数据的行,即观测点的数量:m代表列,即变量的数量:n*m为数据的维度. 一般来说,当拿到一份数据时,最先做的往往就是查看数据集的观测样本数.变量数,以及这些变量的实际含义,以此对数据集的庞大程度和各变量的相对重要性做到心中有数.这对选取何种数据挖掘算法,以及在这之前应该抽取多少及哪些变量及样本纳入建模都有重要的先导作用. 2.2 数据的分类 2.2.1 一般的数据分类 定量数据:连续型数据和离散型数据 定性数据:定类数据.定序数据.定距数据

第二章 数据的储存与运算

在师兄的建议下换了本教材,从头开始学习,发现原来自己前面一个月学的真的是很浅(仅仅照着书打).以下是这个星期的几个典型错误: 1.自己习惯了数学的"省略乘号"思维,带到写程序中: 2.在运用除法时容易忽略"除法两边为整型数据时,结果取整舍小",造成误差,以后在使用除法时,要习惯用如图的表达: [本周小结]1.本周跟着视频学习,但是自己没有事先看书预习,造成自己在看视频上面花了较多时间,自己动手操作打代码的时间较少,下周可以先花两天时间阅读教材,打代码之后再看视频补充