Есть ли способ определить длину файла .dat (с точки зрения строк), не загружая файл в рабочую область?
Как получить длину файла в MATLAB?
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
Этот счетчик строк довольно чистый. Спасибо за публикацию!
- person ephsmith; 26.08.2011
testread будет удален в будущей версии Matlab. Соответствующая версия с textscan: nrows = numel(cell2mat(textscan(fid,'%1c%*[^\n]'))).
- person Yantao Xie; 23.01.2013
@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
Таким образом, вы получите в s возвращаемое значение команды wc (т. е. 0 или отличное от нуля), а в w вы получите строку с количеством строк, соединенных с именем файла. Вам нужно разделить их с помощью [nlines fname] = strtok(w, ' ')
- person Genís; 12.10.2012