Matlab:在文本文件中查找字符串
问题描述:
我搜索了四周,蓓蕾没有找到合适的解决方案。所以我再问一遍。 .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
答
方法#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)
据报道'strfind输入必须是字符arrays.'有什么问题? – cqcn1991 2014-11-05 09:11:23
@ cqcn1991你可以给'whos数据'信息吗? – Divakar 2014-11-05 09:12:10
我把它放在更新中。在上面检查它。 – cqcn1991 2014-11-05 09:15:52