类似于c语言读取文件进行解析
$log_file_name = 'D:/static/develop/kuai_zhi/acagrid.com/public/Logs/'.date('Ym').'/'.date('d').'_error.log';
//$log_file_name = 'D:/static/develop/kuai_zhi/acagrid.com/public/Logs/201701/19_error.log';
if(!file_exists($log_file_name)) return;
$handle = fopen($log_file_name,'rb');
if (FALSE === $handle) {
exit("Failed to open stream to URL");
}
// $stream = fread($handle, $length);//从文件当前指针位置,往后读取n个字节长度
//重置文件指针的位置。指定指针的位置,指针位置修改后。读取文件,后面是从这个位置开始读取了
//fseek($handle,105);
//fgets表示每次读取文件的一行
$error_log_array = [];
while( ($line = fgets($handle) ) !==false){
//每次读取一行
//匹配出现[1],tp日志中用这种表示致命错误类型
if(preg_match("/\[1\]/", $line)){
$error_log_array[] = $line;
}
}
fclose($handle);
需要注意的几个点:
1、如果是使用fwrite,注意避免将原来文件的内容清空掉了。关键是fopen的打开方式。r或者w。
如果使用追加方式则是a标记。
2、fopen的时候,注意判断是否成功打开文件。避免使用feof的时候进入死循环。因为这个函数,当传入进去不是指针,则这个函数永远会返回false
feof的本意是:判断是否为文件结尾。如果是结尾,则返回true。不是结尾返回false。如果恰好传入非法的指针,那么永远不是文件结尾了,一直返回
false。
feof()函数,当传入进去的不是指针类型的时候,使用如下判断会出现死循环
while(!feof($fp)){
}
3、fread和fgets。读取文件一行一行读取,则使用fgets。不是按照行读取,则使用fread()读取。
要注意这一点细节:如果没有更多的内容,则返回false,也就是两种情况,如果里面的内容为空。也会返回false。当读取到文件的结尾的时候,这两个函数也是返回false(难怪我们使用feof()使得我们不会发现这个细节,因为这个函数已经帮助我们判断文件结尾了)
4、使用追加方式(即a标记)打开文件,要注意,这种方式下,无法读取文件内容的,只能往里面写入文件。所以针对这个句柄进行fread()是会得到false的
总结是,如果只是仅仅读取文件的内容,就只用读的方式打开,如果是写入新内容进去,则用a的方式打开
现在明白,为什么要分多种模式进行区分了。以前觉得没有用。现在看来,打开的文件方式决定了,你能够针对文件做什么(添加新内容还是读取内容。)
类似于c语言读取文件进行解析的更多相关文章
- 关于C语言读取文件时候多读一行
梗概:为什么C语言读取文件到结构体时为什么整天多读一行?一切都是[!feof(fp)]的错!!! while (!feof(fp)) { fgets(buffer, , fp); j++; } 像这样 ...
- R语言读取文件
1.R语言读取文件,文件类型为.txt 直接使用read.table()即可,若不知道当前的工作目录,可以使用函数getwd()来查看 2.R语言读取文件,文件类型为.xlsx 方法一:可以把excl ...
- Android之ProgressBar读取文件进度解析
ProgressBar进度条, 分为旋转进度条和水平进度条,进度条的样式根据需要自定义,之前一直不明白进度条如何在实际项目中使用,网上演示进度条的案例大多都是通过Button点 击增加.减少进度值,使 ...
- C语言 读取文件中特定数据
//读取文件数据 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> struct jia ...
- R语言--读取文件(数据输入)
1 数据的输入 1.1 键盘输入 首先新建一张空表: dat<-data.frame(age=numeric(0),gender=character(0),weight=numeric(0)) ...
- LinuxC语言读取文件,分割字符串,存入链表,放入另一个文件
//file_op.c #include <string.h> #include <stdio.h> #include <stdlib.h> struct info ...
- [R语言]读取文件夹下所有子文件夹中的excel文件,并根据分类合并。
解决的问题:需要读取某个大文件夹下所有子文件夹中的excel文件,并汇总,汇总文件中需要包含的2部分的信息:1.该条数据来源于哪个子文件夹:2.该条数据来源于哪个excel文件.最终,按照子文件夹单独 ...
- C语言读取文件大量数据到数组
针对.txt文档的大量有规律数据,譬如100行8列的数据将其读取到二维数组(矩阵)中,留作之后的数据处理. 改程序通过宏定义的方法来确定将要读取程序的行数和列数,将数据读取到二维数组data[100] ...
- C语言文件操作解析(五)之EOF解析(转载)
C语言文件操作解析(五)之EOF解析 在C语言中,有个符号大家都应该很熟悉,那就是EOF(End of File),即文件结束符.但是很多时候对这个理解并不是很清楚,导致在写代码的时候经常出错,特 ...
随机推荐
- AGC 005D.~K Perm Counting(容斥 DP 二分图)
题目链接 \(Description\) 给定\(n,k\),求 满足对于所有\(i\),\(|a_i-i|\neq k\)的排列的个数. \(2\leq n\leq 2000,\quad 1\leq ...
- JavaScript基础笔记(二)变量、作用域和内存问题
变量.作用域和内存问题 一.基本类型和引用类型的值 基本类型值:简单的数据段 引用类型值:由多个值构成的对象 基本类型是按值访问的,引用类型是按引用访问的. 不能给基本类型的值添加属性,尽管不会报错. ...
- MongoError: Cannot update '__v' and '__v' at the same time,错误解决办法
1.讲查询的结果,原封不动的插入到另一个表中,结果报错了:MongoError: Cannot update '__v' and '__v' at the same time,起初认为是mongodb ...
- no such file or directory, open '/node_modules/.staging/
报错 在使用npm过程中连续产生多行报错 no such file or directory, open '/node_modules/.staging/ 原因 npm版本配置不一致导致,可以尝试重新 ...
- python2和python3比较好的共存方法
文章根据网络资料编写,只为个人学习使用.青山... ---------------------------------------------------- 由于工作学习的需求,大家都想同时安装pyt ...
- JVM 内存分配模型概念和java中各种对象的存储
JVM 内存分配模型概念 --在工作中可能用到的机会不多,有个概念的了解 --此文是转载某位读者,应该是在阅读了<深入理解Java虚拟机JVM高级特性与最佳实践> 一书后,总结所得.写的不 ...
- 团队——League of Programers简介
团队名称 League of Programers 团队成员简介 武璧泽:编程能力较强,善于程序思路设计: 邹兰兰:擅长代码的分析.编写与调试: 倪彤炜:擅长解决代码的修正与编写,善于调节团队关系: ...
- css冲刺
CSS知识点及面试题 1.一般与文本相关的属性都可以继承text-/font-/line- 2.background属性1)background-repeat:repeat/repeat-x/repe ...
- IIS7常见错误及解决方法
IIS7常见错误及解决方法 问题一:HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效. 详细错误信息模块 IIS We ...
- Visual Studio 2015 没显示可用的.Net Framework版本
安装了VS 2015企业版, 然后在创建工程的时候遇到了一个问题: 当我选择Framework版本时候, 列表是空的, 如下图所示: 是生成工具出现了问题,所以尝试又安装了下 "Micros ...