PHP 文件迭代器
使用了SPL的 迭代器, 可以直接对打开的文件进行foreach读取, 类的构造如下
class fileIterator implements Iterator
{
private $fp;
private $line_num;
private $line; public function __construct($filename)
{
$fp = @fopen($filename, 'r');
if (!$fp) {
throw new Exception("file ".$filename." is not exists");
}
$this->fp = $fp;
} public function key()
{
return $this->line_num;
} public function current()
{
return $this->line;
} public function rewind()
{
rewind($this->fp);
} public function next()
{
} public function valid()
{
$this->line = fgets($this->fp);
if ($this->line !==false) {
$this->line_num++;
return true;
}
return false;
}
}
使用方法
foreach(new fileIterator('./test.txt') as $k => $line) {
echo $k."->".$line;
}
可以再包装一个方法在对象的构造上,这样就不用显式的去构造类了。
顺带记录一下迭代器的执行顺序
迭代开始(第一次) : rewind valid current key
之后每次遍历一次运行(第二次及以后) : next 、 valid、 current、 key
如果循环的时候没有指定 key (=> value) key()函数将不会执行
PHP 文件迭代器的更多相关文章
- python大文件迭代器的流式读取,之前一直使用readlines()对于大文件可以迅速充满内存,之前用法太野蛮暴力,要使用xreadlines或是直接是f,
#!/usr/bin/env python #encoding=utf-8 import codecs count =0L #for line in file("./search_click ...
- 迭代器模式的一种应用场景以及C#对于迭代器的内置支持
迭代器模式 先放上gof中对于迭代器模式的介绍镇楼 意图 提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示. 别名 游标(Cursor). 动机 一个聚合对象, 如列表(li ...
- Python编码/文件读取/多线程
Python编码/文件读取/多线程 个人笔记~~记录才有成长 编码/文件读取/多线程 编码 常用的一般是gbk.utf-8,而在python中字符串一般是用Unicode来操作,这样才能按照单个字 ...
- 【循序渐进学Python】13.基本的文件I/O
文件I/O是Python中最重要的技术之一,在Python中对文件进行I/O操作是非常简单的. 1. 打开文件 使用 open 函数来打开文件,语法如下: open(name[, mode[, buf ...
- Python文件方法
打开文件 使用open函数,语法格式为:open( name[, mode[, buffering]]),name为打开文件名,mode为打开文件方式,buffering控制文件的缓冲. mode可选 ...
- python学习笔记三 文件操作(基础篇)
文件操作 打开文件 open(name[,mode[,buffering]]) open函数使用一个文件名作为强制参数,然后返回一个文件对象.[python 3.5 把file()删除掉] w ...
- 【转】牛逼闪闪的Ruby迭代器
D瓜哥最近想做一个网站,另外,老早就有学习一门动态语言的想法,满足着两个条件的编程语言中,Ruby.Python是最合适的两种语言.现在Ruby on Rails如日中天,光芒万丈!所以,就选定了Ru ...
- Python按行读取文件
1:readline() file = open("sample.txt") while 1: line = file.readline() if not line: break ...
- python学习笔记之十:文件和素材
这里将介绍函数和对象--文件和流,让你在程序调用期间存储数据,并且可以处理来自其他程序的数据. 一. 打开文件 1.1 open函数 open函数用来打开文件,语法如下:open(name,[.mod ...
随机推荐
- 深入分析:Android中app之间的交互(一,使用Action)
在我们开发Android App应用的时候,有些需求需要我们启动其他的App来处理一些逻辑,例如我们需要根据一个地址来调用系统或者相关的地图Map App,这样我们不用在自己的App中编写相应的功能, ...
- 1、C#基础整理(进制转换的方法)
进制 二进制转换为十进制(展权相加法) 110101 =1*2^5+1*2^4+0*2^3+1*2^2+0*2^1+1*2^0 1. 写2 2. 标指数(从右到左) 3. 乘系数(一一对应) 4 ...
- Unity3D ShaderLab 使用渐变纹理着色
Unity3D ShaderLab 使用渐变纹理着色 在我们编写着色器的过程中,还可以通过渐变纹理来控制漫反射的光照颜色.这种做法同样在VALVE的军团要塞2中及其流行. 前期,请准备一个渐变色的图片 ...
- SQL float 保留两位小数
1. SQL 数据库里类型改为numeric,小数位设置成22. 在SQL语句中转换:select convert(字段,numeric(18,2)) AS 字段3. 在DataFormatStrin ...
- nginx的压力测试
#-----------http_load讲解------------------------------------# Web服务器压力测试工具常见的有http_load.webbench.ab ...
- I.MX6 ubuntu-core-14.04 Apache php mysql Qt5
/*************************************************************************** * I.MX6 ubuntu-core-14. ...
- 简明python教程 --C++程序员的视角(九):函数式编程、特殊类方法、测试及其他
函数式编程 Lambda exec,eval和assert语句,repr函数 lambda语句 用来创建简短的单行匿名函数 print_assign = lambda name, value: n ...
- [转载]python 爬虫总结
1.基本抓取网页 get方法 import urllib2 url = "http://www.baidu.com" response = urllib2.urlopen(url) ...
- TC Hash Filter
Overview The u32 filter allows you to match on any bit field within a packet, so it is in some ways ...
- hdu 5203
题目大意: 有n根连续的木棒,其中有m根是坏的,现在要求将木棒切成连续的四段,使得其中三段中都不包含坏的木棒,且三段木棒的长度和最大,在最长的前提下看这三段木棒能否拼成三角形,如果能的话,问最多有多少 ...