2014-09-26 2 views
2

Я хотел бы, чтобы подсчитать количество строк в текстовом файле, начиная с определенной строкой толькоПодсчитать количество строк, начиная с определенной строкой - Matlab

function count = countLines(fname) 
fh = fopen(fname, 'rt'); 
assert(fh ~= -1, 'Could not read: %s', fname); 
x = onCleanup(@() fclose(fh)); 
count = 0; 
while ~feof(fh) 
count = count + sum(fread(fh, 16384, 'char') == char(10)); 
end 
count = count+1; 
end 

Я использую вышеуказанную функцию для подсчета количества строк во всем текстовом файле. Но теперь я хотел найти количество строк, начинающихся только с определенных строк (например, все строки, начинающиеся с буквы 's').

ответ

0

Здесь вы можете попробовать два подхода: importdata.

Подход № 1

str1 = 's'; %// search string 

%// Read in text data into a cell array with each cell holding text data from 
%// each line of text file 
textdata = importdata(fname,'\n') ; 

%// Compare each cell's starting n characters for the search string, where 
%// n is no. of chars in search string and sum those matches for the final count 
count = sum(cellfun(@(x) strncmp(x,str1,numel(str1)),textdata)) 

Подход № 2

%// ..... Get str1 and textdata as shown in Approach #1 

%// Convert cell array data into char array 
char_textdata = char(textdata) 

%// Select the first n columns from char array and compare against search 
%// string for all characters match and sum those matches for the final count. 
%// Here n is the number of characters in search string 
count = sum(all(bsxfun(@eq,char_textdata(:,1:numel(str1)),str1),2)) 

С обоих этих подходов, можно даже указать массив символов в качестве строки поиска.

0

Хотя я не получаю идею позади вашего кода, так что я не могу изменить его я использую этот подход:

fid = fopen(txt); 

% Loop through data file until we get a -1 indicating EOF 
while(x ~= (-1)) 
    line = fgetl(fid); 
    r = r+1; 
end 
r = r-1; 

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

Также я не знаю, каковы проблемы с производительностью в отношении этих двух методов.

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