使用matlab搜索文本文件中的特定单词并添加字符串?

时间:2017-07-24 14:14:27

标签: string matlab cell

还没有找到如何在任何地方搜索文本文件中的特定单词,所以在这里,这就是我现在所拥有的,只是阅读并打印整个文本文件。 我的文本文件包含一些词语:

K_G_M_H_NICK_MA,0,7500

P_SA_SWITCH_P_MPE_VL,0,1

如果字符串以'K'开头,则必须在行的末尾写'spec',无论K后面是什么。输出必须是

K_G_M_H_NICK_MA,0,7500规格

如果字符串以'P'开头,则必须在行的末尾写'test',无论P后面是什么。输出必须是

P_SA_SWITCH_P_MPE_VL,0,1测试

2 个答案:

答案 0 :(得分:3)

遗憾的是,MATLAB没有此功能。您没有选择,只能阅读每行文本,检查您需要的内容然后保存新文件。您可以使用fgetl查询文本文件中的行。对dependencies { compile 'com.github.QuadFlask:colorpicker:0.0.13' } 的后续调用将读取下一行,并记住您读取的最后一行。您可以将其与标准fgetlfopen结合使用来打开和关闭文件。在使用fclose之前,您需要使用fopen引用打开的文件。假设您的文件名为fgetl,只需在行中读取,检查条件的第一个字符,然后在行匹配时打印出您需要的内容。在您的代码之前和之后修剪任何空格可能是明智的,因此strtrim可能对您有用。这样的东西应该可以工作,也假设你想要写一个名为text.txt的新文件:

text_new.txt

答案 1 :(得分:3)

如果您有足够的内存加载到整个文件中,您可以利用regexprep之类的工具立即对整个文档进行操作,这可能会节省一些时间与比较和文件输入/输出

对于regexprep示例,我们可以执行以下操作:

% Load entire data file into memory (cell array)
fID =  fopen('mydata.txt', 'r');
tmpdoc = {};
ii = 1;
while ~feof(fid)
    tmpdoc{ii} = fgetl(fID);
    ii = ii + 1;
end
fclose(fID);  % Clean up

% Make the necessary replacements
% String insensitive search
tmpdoc = regexprep(tmpdoc, '(^K.*)$', '$0 spec', 'preservecase'); % Find lines (cells) that begin with K
tmpdoc = regexprep(tmpdoc, '(^P.*)$', '$0 test', 'preservecase'); % Find lines (cells) that begin with P

% Write data
fID_new = fopen('mydata_new.txt', 'w');
fprintf(fID_new, '%s\n', tmpdoc{:});
fclose(fID_new);  % Clean up

对于2000行文件的基本时序(只重复你的两行,这表示最坏的情况),这种方法比rayryeng's answer大约快3倍,但他的方法只花了大约0.25秒所以它是还是很快。