Matlab:在文本文件中查找字符串

时间:2014-11-05 08:53:15

标签: matlab

我已经四处寻找,芽没有找到合适的解决方案。所以我再问一次。 .txt文件中有许多行。看起来像这样:

 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

更新: whos data

 Name      Size            Bytes  Class     Attributes

  data      1x1              3094  struct    

1 个答案:

答案 0 :(得分:3)

方法#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)