.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
答案 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)