我正在使用100多个conf文件。我需要查找并替换所有这些文件的各种变量。例如,我想找到这行
振幅= 100;并将其替换为:Amplitude = 200;所有文件。
我在线搜索过,仅找到一个文件的解决方案。我正在寻找在Matlab中做到这一点的方法。有什么想法吗?
答案 0 :(得分:0)
如果可以将这些文件作为普通文本文件打开,则我不会使用matlab。 Notepad ++有一个替换选项,可用于任意多个文件,只需确保先在备份文件上对其进行测试即可。因此,让它找到“振幅= 100”并将其替换为您想要的值。
要查看操作方法,请看这里: how-to-find-and-replace-lines-in-multiple-files
如果不能这样做,请将所有文件放在同一目录中(无论如何都必须这样做)。然后使用该目录将文件加载到matlab中并运行for循环。但是可能会有点慢。 基本上,如果可以执行1个文件,则可以使用for循环来完成所有文件。
如果您需要帮助,可以显示以前使用的一些代码。
答案 1 :(得分:0)
那么,Matlab解决方案将是(递归)打开目录中的所有文件。在这里,我展示了非递归解决方案的示例(它不检查子文件夹),但是如果需要的话,也可以很容易地对其进行修改以搜索子文件夹:
d = dir(yourPath);
for i = 1 : length(d)
if ~(d(i).isdir)
%d(i) is file.
replaceSingleFile(strcat(d(i).folder, d(i).name));
end
end
正如您所说,您已经知道如何替换单个文件,尽管要在此处获得完整的答案,解决方案仍可以(在功能replaceSingleFile
中)。
F = fopen(fileYouWantReplaced);
i = 1;
while (~feof(F))
L = fgetl(F);
L = strrep(L, 'Amplitude = 100;', 'Amplitude = 200;');
Buf{i} = L;
i = i + 1;
end
fclose(F);
%now just write all Buf to the same file again.
F = fopen(file..., 'w'); % Discard contents.
for i = 1 : numel(Buf)
fprintf(F, '%s\n', Buf{i});
end
fclose(F);