【问题标题】:How to get the length of a file in MATLAB?如何在 MATLAB 中获取文件的长度?
【发布时间】:2010-10-31 00:12:18
【问题描述】:

有没有办法在不将文件加载到工作区的情况下计算 .dat 文件的长度(以行为单位)?

【问题讨论】:

  • 如何为这种文件格式定义“行”?它是每行一行的文本文件,由 \n 终止吗?还是固定长度的二进制记录?还是别的什么?

标签: file matlab file-format


【解决方案1】:

行计数器 -- 每行只加载一个字符:

Nrows = numel(textread('mydata.txt','%1c%*[^\n]'))

或文件长度(Matlab):

datfileh = fopen(fullfile(path, filename));
fseek(datfileh, 0,'eof');
filelength = ftell(datfileh);
fclose(datfileh);

【讨论】:

  • 这个行计数器很干净。感谢发帖!
  • testread 将在未来的 Matlab 版本中删除。与 textscan 对应的版本是 nrows = numel(cell2mat(textscan(fid,'%1c%*[^\n]'))).
  • @YantaoXie, Alex K.,这种方法明显快于使用fgets() 计算行数。处理 1M 行的遥测文件时,可以节省几秒钟。
【解决方案2】:

还值得记住的是,您可以使用文件系统的内置命令,因此在 linux 上您可以使用该命令

[s,w] = system('wc -l your_file.dat');

然后从返回的文本中获取行数(存储在w中)。 (我认为在 Windows 下没有等效的命令。)

【讨论】:

  • 这样,您将在 s 中获得命令 wc 的返回值(即 0 或与零不同),在 w 中您将获得一个字符串,其中包含与名称连接的行数文件。您需要用 [nlines fname] = strtok( w, ' ') 将它们分开
【解决方案3】:

我假设您正在处理文本文件,因为您提到了查找行数。 这是一个解决方案:

fid = fopen('your_file.dat','rt');
nLines = 0;
while (fgets(fid) ~= -1),
  nLines = nLines+1;
end
fclose(fid);

这使用FGETS 读取每一行,计算它读取的行数。请注意,文件中的数据永远不会保存到工作区,它只是用于 while 循环的条件检查。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-04
    • 1970-01-01
    相关资源
    最近更新 更多