用matlab命令访问每个文件的最后一行?

时间:2010-04-17 17:45:45

标签: file matlab

我有20个文本文件,我想使用matlab循环来获取每个文件的最后一行而不考虑其他行。是否有任何matlab命令来解决这个问题?

3 个答案:

答案 0 :(得分:5)

您可以尝试的一件事是将文本文件作为二进制文件打开,搜索到文件的末尾,并从文件末尾向后读取单个字符(即字节)。此代码将从文件末尾读取字符,直到它到达换行符(如果在文件的最末端找到换行符,则忽略换行符):

fid = fopen('data.txt','r');     %# Open the file as a binary
lastLine = '';                   %# Initialize to empty
offset = 1;                      %# Offset from the end of file
fseek(fid,-offset,'eof');        %# Seek to the file end, minus the offset
newChar = fread(fid,1,'*char');  %# Read one character
while (~strcmp(newChar,char(10))) || (offset == 1)
  lastLine = [newChar lastLine];   %# Add the character to a string
  offset = offset+1;
  fseek(fid,-offset,'eof');        %# Seek to the file end, minus the offset
  newChar = fread(fid,1,'*char');  %# Read one character
end
fclose(fid);  %# Close the file

答案 1 :(得分:3)

在Unix上,只需使用:

[status result] = system('tail -n 1 file.txt');
if isstrprop(result(end), 'cntrl'), result(end) = []; end

在Windows上,您可以从GnuWin32UnxUtils项目中获取tail可执行文件。

答案 2 :(得分:2)

它可能效率不高,但对于短文件来说就足够了。

function pline = getLastTextLine(filepath)
fid = fopen(filepath);

while 1
    line = fgetl(fid);

    if ~ischar(line)
        break;
    end

    pline = line;
end
fclose(fid);