我喜欢使用以下代码完成这项任务
fid = fopen('someTextFile.txt', 'rb');
%# Get file size.
fseek(fid, 0, 'eof');
fileSize = ftell(fid);
frewind(fid);
%# Read the whole file.
data = fread(fid, fileSize, 'uint8');
%# Count number of line-feeds and increase by one.
numLines = sum(data == 10) + 1;
fclose(fid);
如果你有足够的内存能够一次读取整个文件,这是非常快的。它应该适用于Windows和Linux风格的线路结束。
编辑:我测量了迄今提供的答案的性能。以下是确定包含100万个双精度值(每行一个值)的文本文件行数的结果。平均10次尝试
Author Mean time +- standard deviation (s)
------------------------------------------------------
Rody Oldenhuis 0.3189 +- 0.0314
Edric (2) 0.3282 +- 0.0248
Mehrwolf 0.4075 +- 0.0178
Jonas 1.0813 +- 0.0665
Edric (1) 26.8825 +- 0.6790
使用Perl和读取所有文件作为二进制数据的方法最快。我不会惊讶,如果Perl内部也读取大块的文件,而不是逐行循环(只是一个猜测,不知道任何关于Perl)。
使用一个简单的fgetl() – 循环比其他方法慢25-75倍。
编辑2:包括Edric的第二种方法,它比Perl解决方案快得多,与之相当。