Matlab - 如何扫描文本文档以获取特定数据,然后报告行号

时间:2018-03-13 06:01:44

标签: matlab

我想扫描包含特定短语的文本文件,其中包含如下所示的数据,然后打印出该短语出现的行号。例如:如果我想找到短语G01 Z0. F5.出现的位置,那么解决方案就是"第5行。"我已尝试使用textscanfscanf,但我找不到有效的解决方案。任何和所有的帮助表示赞赏。

示例文本文件:

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

3 个答案:

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