И не говорите fskipl
, потому что он не работает !!!Как подсчитать количество строк в текстовом файле в Octave?
fskipl undefined
.
И не говорите fskipl
, потому что он не работает !!!Как подсчитать количество строк в текстовом файле в Octave?
fskipl undefined
.
У вас есть fgetl
? Если да, то вы можете сделать эту маленькую петлю:
f = fopen('myfile.txt', 'rt');
ctr = 0;
ll = fgetl(f);
while (!isnumeric(ll)) %# fgetl returns -1 when it hits eof. But you can't do ll != -1 because blank lines make it barf
ctr = ctr+1;
ll = fgetl(f);
end
fclose(f);
В противном случае, вы могли бы сделать некоторые взломать, как:
f = fopen('myfile.txt', 'rb');
ctr = 0;
[x, bytes] = fread(f, 8192); %# use an 8k intermediate buffer, change this value as desired
while (bytes > 0)
ctr = ctr + sum(x == 10); %# 10 is '\n'
[x, bytes] = fread(f, 8192);
end
fclose(f);
10 является ASCII код для символа новой строки. Но это кажется ненадежным, особенно если вы сталкиваетесь с файлом, который использует возврат каретки вместо новой строки.
На самом деле я использую 'fgetl'. Подсчет строк с 'fgetl' кажется довольно грубым (и неэффективным). Мне было интересно, есть ли лучший способ ... –
Спасибо за объяснение про 'll! = -1'. Я получал ошибку и не мог понять, почему. Почему у этого есть проблема с пустыми строками? –
Попробуйте ввести '' '! = -1' в командной строке - вы увидите, что ответ пуст, а не истина. – mtrw
Какую версию Octave вы используете? У меня есть 'fskipl' в 3.4.0. – mtrw
Octave 3.2.4 ... –