windows下Perl如何读取大文件的最后一行(总结)
Perl中读取文件最后一行的方法很多,比如
(1)将文件读入数组,取最后一个元素
open (FILE,"file.txt") or die "$!";
my @arr=<FILE>;;
close FILE;
my $last=$arr[$#arr]; #$last里就是最后一行的内容了。
(2)一行一行读入,到最后一行时输出
open (FILE,"file.txt") or die "$!";
while (<FILE>;)
{
open (TMP,">tmp.txt") or die "$!";
print TMP $_;
close TMP;
}
close FILE;
或者
open (FILE,"file.txt") ;
$a=<FILE>;;push(@a,$a);
while (<FILE> )
{
push(@a,$_);
shift@a;
}
close FILE;
print @a;
(3)这个并未尝试过,有兴趣可以试试
http://search.cpan.org/~mjd/Tie-File-0.96/lib/Tie/File.pm
DESCRIPTION ^
Tie::File represents a regular text file as a Perl array. Each element in the array corresponds to a record in the file. The first line of the file is element 0 of the array; the second line is element 1, and so on.
The file is not loaded into memory, so this will work even for gigantic files.
Changes to the array are reflected in the file immediately.
Lazy people and beginners may now stop reading the manual.
(4)以上的方法都需要遍历整个文件,效率较低。下面这个方法是最高效的,特别是文件很大时,方法是:
打开文件,把指针移动到最后面,一个一个字节往前读,直到读到\N为止
#!/usr/bin/perl -w use strict; my $file = shift or die;
my $content = ""; open (F, $file) or die $!;
seek (F, 0, 2); # set handler at the end of $file
until ($content =~ m/\n(.*)\n?$/)
{
my $string;
if (seek (F, -1024, 1)) # backward 1024 bytes
{
my $n = read (F, $string, 1024) or die $!;
$content = $string . $content;
last if ($n < 1024);
seek(F, -1024, 1);
}
else{
my $len = tell F;
seek (F, 0, 0) || die "see error at $file";
read (F, $string, $len) or die $!;
$content = $string . $content;
last;
}
}
close(F); if ($content =~ m/\n\n$/)
{
print "\n";
}elsif ($content =~ m/\n?(.*)\n?$/){
print "$1\n";
}else{
print $content, "\n";
}
文中内容来自:提问http://bbs.chinaunix.net/thread-599099-1-1.html
windows下Perl如何读取大文件的最后一行(总结)的更多相关文章
- windows下如何快速删除大文件
rmdir 磁盘:\文件夹的名字 /s /q; eg:rmdir E:\vue_workspace\KB\day08 /s/q /S 表示除目录本身外,还将删除指定目录下的所有子目录和文件. ...
- windows下IIS+PHP解决大文件上传500错问题
linux下改到iis+php后,上传大于2M就出500错,改了php.ini中的upload_max_filesize也不行,最后解决如下: 第一步:修改php.ini 上传大小限制 (以上传500 ...
- PHP如何快速读取大文件
在PHP中,对于文件的读取时,最快捷的方式莫过于使用一些诸如file.file_get_contents之类的函数,简简单单的几行代码就能 很漂亮的完成我们所需要的功能.但当所操作的文件是一个比较大的 ...
- php使用file函数、fseek函数读取大文件效率分析
php读取大文件可以使用file函数和fseek函数,但是二者之间效率可能存在差异,本文章向大家介绍php file函数与fseek函数实现大文件读取效率对比分析,需要的朋友可以参考一下. 1. 直接 ...
- Java多线程读取大文件
前言 今天是五一假期第一天,按理应该是快乐玩耍的日子,但是作为一个北漂到京师的开发人员,实在难想出去那玩耍.好玩的地方比较远,近处又感觉没意思.于是乎,闲着写篇文章,总结下昨天写的程序吧. 昨天下午朋 ...
- PHP读取大文件的几种方法介绍
读取大文件一直是一个头痛的问题,我们像使用php开发读取小文件可以直接使用各种函数实现,但一到大文章就会发现常用的方法是无法正常使用或时间太长太卡了,下面我们就一起来看看关于php读取大文件问题解决办 ...
- IIS7下swfupload上传大文件出现404错误
要求上传附件大小限制在2G,原本以为可以轻松搞定.在编译模式下可以上传大文件,可是在IIS7下(自己架的服务器),一上传大的文件就会出现 Http 404错误,偶尔有的文件还有IO. error错误. ...
- Java高效读取大文件
1.概述 本教程将演示如何用Java高效地读取大文件.这篇文章是Baeldung (http://www.baeldung.com/) 上“Java——回归基础”系列教程的一部分. 2.在内存中读取 ...
- Java高效读取大文件(转)
1.概述 本教程将演示如何用Java高效地读取大文件.这篇文章是Baeldung(http://www.baeldung.com/) 上“Java——回归基础”系列教程的一部分. 2.在内存中读取 读 ...
随机推荐
- 在Ubuntu上安装Chrome浏览器和ChromeDriver
启动脚本后报错 selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable may have w ...
- Java分布式:JWT(JSON Web Tokens)
Java分布式:JWT(JSON Web Tokens) 0.优势 Session方式存储用户状态占用大量服务器内存.一般而言,大型应用还需要借助一些KV数据库和一系列缓存机制来实现Session的存 ...
- Java程序设计专题
- CSS 一个完整的例子
My first web page What this is A simple page put together using HTML. I said a simple page put toget ...
- maven私服客户端配置
<?xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://mav ...
- Nginx 域名跳转
域名跳转 就是实现URL的跳转和隐藏真实地址,基于Perl语言的正则表达式规范.平时帮助我们实现拟静态,拟目录,域名跳转,防止盗链等 . 域名跳转配置 1.多域名指定一个域名重定向 # 空格分割域名 ...
- 《Python学习手册》(三)
string 字符串,和列表.元组,都适用序列操作. 关于python转义字符 迭代 for x in S: print(x) [c * 2 for c in S] Comparasion: > ...
- Oracle 集合操作
在 Oracle 中提供了三种类型集合操作:并(UNION).交(INTERSECT).差(MINUS) · UNION:将多个查询的结果组合到一个查询结果之中,没有重复内容 · UNION ALL: ...
- 智能DNS
DNS查找下一个服务的地址 一.智能DNS APP通过域名访问DNS服务器,DNS根据域名对应一组IP中随机选择一个,发给APP.从这个意义说智能DNS,智能DNS相当一个七层的负载均衡. 二.H ...
- 编写一个程序,将 a.txt 文件中的单词与 b.txt 文件中的单词交替合并到 c.txt 文件中,a.txt 文件中的单词用回车符分隔,b.txt 文件中用回车或空格进行分隔。
package IO; import java.io.*; public class test { public void connectWords(File file1, File file2, F ...