Как получить длину файла в MATLAB?

Есть ли способ определить длину файла .dat (с точки зрения строк), не загружая файл в рабочую область?


person Community    schedule 03.06.2009    source источник
comment
Как определяются строки для этого формата файла? Это текстовый файл с одной строкой в ​​​​строке, заканчивающийся \n? Или двоичные записи фиксированной длины? Или что-то другое?   -  person Andrew Janke    schedule 05.06.2009


Ответы (3)


Счетчик строк - загружает только один символ в строку:

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

или длина файла (Matlab):

datfileh = fopen(fullfile(path, filename));
fseek(datfileh, 0,'eof');
filelength = ftell(datfileh);
fclose(datfileh);
person Alex Kimmerly    schedule 25.08.2011
comment
Этот счетчик строк довольно чистый. Спасибо за публикацию! - person ephsmith; 26.08.2011
comment
testread будет удален в будущей версии Matlab. Соответствующая версия с textscan: nrows = numel(cell2mat(textscan(fid,'%1c%*[^\n]'))). - person Yantao Xie; 23.01.2013
comment
@YantaoXie, Алекс К., этот метод заметно быстрее, чем просто подсчет строк с помощью fgets(). При обработке файла телеметрии размером 1 млн строк экономится несколько секунд. - person ysap; 13.03.2015

Я предполагаю, что вы работаете с текстовыми файлами, поскольку вы упомянули о поиске количества строк. Вот одно из решений:

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

При этом используется FGETS для чтения каждой строки с подсчетом числа строк он читает. Обратите внимание, что данные из файла никогда не сохраняются в рабочей области, они просто используются в условной проверке для цикла while.

person gnovice    schedule 03.06.2009

Также стоит помнить, что вы можете использовать встроенные команды вашей файловой системы, поэтому в Linux вы можете использовать команду

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

а затем получить количество строк из возвращенного текста (который хранится в w). (Я не думаю, что в Windows есть эквивалентная команда.)

person djr    schedule 07.06.2009
comment
Таким образом, вы получите в s возвращаемое значение команды wc (т. е. 0 или отличное от нуля), а в w вы получите строку с количеством строк, соединенных с именем файла. Вам нужно разделить их с помощью [nlines fname] = strtok(w, ' ') - person Genís; 12.10.2012