【发布时间】:2010-10-31 00:12:18
【问题描述】:
有没有办法在不将文件加载到工作区的情况下计算 .dat 文件的长度(以行为单位)?
【问题讨论】:
-
如何为这种文件格式定义“行”?它是每行一行的文本文件,由 \n 终止吗?还是固定长度的二进制记录?还是别的什么?
标签: file matlab file-format
有没有办法在不将文件加载到工作区的情况下计算 .dat 文件的长度(以行为单位)?
【问题讨论】:
标签: file matlab file-format
行计数器 -- 每行只加载一个字符:
Nrows = numel(textread('mydata.txt','%1c%*[^\n]'))
或文件长度(Matlab):
datfileh = fopen(fullfile(path, filename));
fseek(datfileh, 0,'eof');
filelength = ftell(datfileh);
fclose(datfileh);
【讨论】:
fgets() 计算行数。处理 1M 行的遥测文件时,可以节省几秒钟。
还值得记住的是,您可以使用文件系统的内置命令,因此在 linux 上您可以使用该命令
[s,w] = system('wc -l your_file.dat');
然后从返回的文本中获取行数(存储在w中)。 (我认为在 Windows 下没有等效的命令。)
【讨论】:
我假设您正在处理文本文件,因为您提到了查找行数。 这是一个解决方案:
fid = fopen('your_file.dat','rt');
nLines = 0;
while (fgets(fid) ~= -1),
nLines = nLines+1;
end
fclose(fid);
这使用FGETS 读取每一行,计算它读取的行数。请注意,文件中的数据永远不会保存到工作区,它只是用于 while 循环的条件检查。
【讨论】: