2014-11-05 175 views
1

我搜索了四周,蓓蕾没有找到合适的解决方案。所以我再问一遍。 .txt文件中有很多行。看起来是这样的:Matlab:在文本文件中查找字符串

PRINT CONTENTS OF SUPERELEMENT yg_bde                                                             
PRINT OPTION =  3 

HEADER = 
      8   55   2   12   6 
      13   0   13   11   0 
      1   1   0   0   1 
      0   0   1   78  14014 
      0  1584   166   103  yg_b 
     de   1561   0       
      922   931  1105  1121  1144 
     1158  1323  1503   0   989 
     1047 110005225   0   0   3 
      0            0 
      419   0   0   0   0 
      0   0   0   0 

HEADER SUMMARY: 
NUMBER OF ROWS = 55 
NUMBER OF MATRICES =  2 
NUMBER OF EDGE PLOT LINES = 12 
NUMBER OF DEGREES OF FREEDOM PER NODE =  6 
NUMBER OF DEGREE OF FREEDOM INDICES = 13 
NUMBER OF NODES = 11 
NUMBER OF LOAD VECTORS =  1 
NUMBER OF TRANSFORMATIONS =  0 
BASE FILE NAME= yg_bde        

我需要找到NUMBER OF ROWS = 55并获得行号。 我认为需要做的是 1.查找和这条线找到Number of ROWS 2.打开成数,所以我可以得到55

我试过strfind(file ,string),但它不能返回的行号,只是文件在一行时的索引。

那么,我如何找到NUMBER OF ROWS

UPDATE: whos data

Name  Size   Bytes Class  Attributes 

    data  1x1    3094 struct  

回答

2

方法#1

importdata基础的方法 -

%// Import text data as a cell array with each cell holding each row of text data 
data = importdata(inputfile,'\n') %// Edit inputfile to the path of your text file 

%// Find the row(s) that holds the string 'NUMBER OF ROWS' 
row_idx = find(~cellfun('isempty',strfind(data,'NUMBER OF ROWS'))) 

%// Find the number(s) in that/those row(s) 
num = arrayfun(@(x) regexp(data{x}, '\d+', 'match'),row_idx) 

输出我 -

row_idx = 
    19 
num = 
    '55' 

现在,num是一个单元阵列。如果你想有一个数字数组,str2double包装它 -

num_array = str2double(num) 

注:如果您有多条线路与字符串'NUMBER OF ROWS'这也适用。


方法2

替代fgetl基础的办法,通过阅读文本文件line-by-line工程 -

fid = fopen(inputfile); %// Edit inputfile to the path of your text file 

tline = fgetl(fid); 
num = []; 
while ischar(tline) 
    if ~isempty(strfind(tline,'NUMBER OF ROWS')) 
     num = [num regexp(tline, '\d+', 'match')]; %#ok<AGROW> 
    end 
    tline = fgetl(fid); 
end 

fclose(fid); 
num_array = str2double(num) 
+0

据报道'strfind输入必须是字符arrays.'有什么问题? – cqcn1991 2014-11-05 09:11:23

+0

@ cqcn1991你可以给'whos数据'信息吗? – Divakar 2014-11-05 09:12:10

+0

我把它放在更新中。在上面检查它。 – cqcn1991 2014-11-05 09:15:52