还没有找到如何在任何地方搜索文本文件中的特定单词,所以在这里,这就是我现在所拥有的,只是阅读并打印整个文本文件。 我的文本文件包含一些词语:
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测试
答案 0 :(得分:3)
遗憾的是,MATLAB没有此功能。您没有选择,只能阅读每行文本,检查您需要的内容然后保存新文件。您可以使用fgetl
查询文本文件中的行。对dependencies {
compile 'com.github.QuadFlask:colorpicker:0.0.13'
}
的后续调用将读取下一行,并记住您读取的最后一行。您可以将其与标准fgetl
和fopen
结合使用来打开和关闭文件。在使用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秒所以它是还是很快。