2011-12-16 2 views

ответ

2

У вас есть 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 код для символа новой строки. Но это кажется ненадежным, особенно если вы сталкиваетесь с файлом, который использует возврат каретки вместо новой строки.

+1

На самом деле я использую 'fgetl'. Подсчет строк с 'fgetl' кажется довольно грубым (и неэффективным). Мне было интересно, есть ли лучший способ ... –

+0

Спасибо за объяснение про 'll! = -1'. Я получал ошибку и не мог понять, почему. Почему у этого есть проблема с пустыми строками? –

+1

Попробуйте ввести '' '! = -1' в командной строке - вы увидите, что ответ пуст, а не истина. – mtrw

Смежные вопросы