2010-04-17 15 views
5

Ho 20 file di testo e voglio usare un ciclo MATLAB per ottenere l'ultima riga di ogni file senza prendere in considerazione le altre linee. c'è qualche comando MATLAB per risolvere questo problema?Comando Matlab per accedere all'ultima riga di ogni file?

+0

il numero di righe in ogni file non è lo stesso e può essere casuale. – bzak

risposta

5

Una cosa che si può provare è quella di aprire il file di testo come file binario, cercare fino alla fine del file e leggere i singoli caratteri (cioè i byte) all'indietro dalla fine del file. Questo codice leggerà caratteri dalla fine del file fino a quando non colpisce un carattere di fine riga (ignorando una nuova linea, se lo trova alla fine del file):

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

Su Unix, è sufficiente utilizzare:

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

Su Windows, è possibile ottenere l'eseguibile tail dai progetti GnuWin32 o UnxUtils.

2

Potrebbe non essere molto efficiente, ma per i file brevi può essere sufficiente.

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

while 1 
    line = fgetl(fid); 

    if ~ischar(line) 
     break; 
    end 

    pline = line; 
end 
fclose(fid); 
Problemi correlati