我想扫描包含特定短语的文本文件,其中包含如下所示的数据,然后打印出该短语出现的行号。例如:如果我想找到短语G01 Z0. F5.
出现的位置,那么解决方案就是"第5行。"我已尝试使用textscan
和fscanf
,但我找不到有效的解决方案。任何和所有的帮助表示赞赏。
示例文本文件:
G17 G20 G90 G94 G54
G0 Z0.25
X-0.5 Y0.
Z0.1
G01 Z0. F5.
G02 X0. Y0.5 I0.5 J0. F2.5
X0.5 Y0. I0. J-0.5
X0. Y-0.5 I-0.5 J0.
X-0.5 Y0. I0. J0.5
G01 Z0.1 F5.
G00 X0. Y0. Z0.25
答案 0 :(得分:0)
我认为这样可行,使用textdata将每行读入一个单元格(即使用Delimiter =''以避免与空格分割),然后搜索文本的第一个匹配项
str_to_find='G01 Z0. F5.'
fileID=fopen('sample.txt');
textdata=textscan(fileID,'%s','Delimiter','');
fclose(fileID);
for p =1:size(textdata{1},1)
if strfind(textdata{1}{p},str_to_find)
fprintf('line %d',p);
break;
end
end
答案 1 :(得分:0)
function L = scantxt(filename,check)
fid = fopen(filename,'rt');
l = fgetl(fid);ct=1;
L = -1;
while ~isnumeric(l)
if strcmp(l,check),L=ct;fclose(fid);return;end
l=fgetl(fid);ct=ct+1;
end
fclose(fid);
结果:
>> check = 'G01 Z0. F5.';
>> scantxt('test.txt',check)
ans =
5
答案 2 :(得分:0)
这应该可以解决问题:
name
contains function的行为方式是匹配包含目标字符串的每个字符串。这意味着如果您的文本文件内容是:
% Read all the lines in the text file...
fid = fopen('data.txt','r');
input = textscan(fid,'%[^\n]');
data = input{1,1};
fclose(fid);
% Define the target string...
target = 'G01 Z0. F5.';
% Fine the lines that contain the target string...
k = find(contains(data,target)) % Output: 5
无论如何都会返回索引G17 G20 G90 G94 G54
G0 Z0.25
X-0.5 Y0.
Z0.1
abc G01 Z0. F5. abc
G02 X0. Y0.5 I0.5 J0. F2.5
X0.5 Y0. I0. J-0.5
X0. Y-0.5 I-0.5 J0.
X-0.5 Y0. I0. J0.5
G01 Z0.1 F5.
G00 X0. Y0. Z0.25
。如果您想将搜索范围限制为完全匹配,请使用以下代码strcmp代替:
5