【发布时间】:2013-04-19 12:34:12
【问题描述】:
我想读取 MATLAB 中一个文件夹中的一些文本文件,计算每个文件中的行数,最后将这些数字相加。如果有人指导我如何在 MATLAB 中进行操作,我将不胜感激?
【问题讨论】:
我想读取 MATLAB 中一个文件夹中的一些文本文件,计算每个文件中的行数,最后将这些数字相加。如果有人指导我如何在 MATLAB 中进行操作,我将不胜感激?
【问题讨论】:
要获取所有文本文件名,请使用 dir(*.txt) http://www.mathworks.com/help/matlab/ref/dir.html
要计算所有行,请参阅此答案:Is there a way in Matlab to determine the number of lines in a file without looping through each line?
【讨论】:
Matlab 真的不适合那个。底层操作系统通常在这方面做得更好,所以使用系统调用。
从 this question 改写我原来的答案(从那以后我学到了一些新技巧:)
if (isunix) %# Linux, mac
[~, result] = system('wc -l *');
numLines = cellfun(@str2double, regexp(result, '([0-9]+) total', 'tokens'))
elseif (ispc) %# Windows
[~, result] = system('find /v /c "&*fake&*" *.*');
numLines = sum(str2double( regexp(result, '[0-9]+', 'match') ))
else %# Some smaller OS
error('Unsupported operating system.');
end
请注意,这将正常工作,除了
total 的文件:) 我很确定有一个更简洁的单行解决方案来解析 linux 结果字符串;当前的混乱是由于regexp(..., 'tokens') 返回了一个 cell of cells,这对于当前上下文非常不方便(老实说,我没有找到很多它 的上下文> 方便),所以这必须由cellfun 解决。
但是,好吧,它认为在大多数情况下它应该可以解决问题。