Команда Matlab для доступа к последней строке каждого файла? - PullRequest
5 голосов
/ 17 апреля 2010

У меня есть 20 текстовых файлов, и я хочу использовать цикл matlab, чтобы получить последнюю строку каждого файла без учета других строк. есть ли команда matlab для решения этой проблемы?

Ответы [ 3 ]

5 голосов
/ 17 апреля 2010

Одна вещь, которую вы можете попробовать, - это открыть текстовый файл в виде двоичного файла, выполнить поиск до конца файла и прочитать отдельные символы (то есть байты) назад от конца файла. Этот код будет читать символы с конца файла до тех пор, пока не попадет на символ новой строки (игнорируя символ новой строки, если найдет его в самом конце файла):

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
3 голосов
/ 18 апреля 2010

В Unix просто используйте:

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

В Windows вы можете получить исполняемый файл tail из GnuWin32 или UnxUtils проектов.

2 голосов
/ 16 апреля 2013

Это может быть не очень эффективно, но для коротких файлов может быть достаточно.

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

while 1
    line = fgetl(fid);

    if ~ischar(line)
        break;
    end

    pline = line;
end
fclose(fid);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...