搜索并替换变量

时间:2018-06-28 02:14:38

标签: matlab

我正在使用100多个conf文件。我需要查找并替换所有这些文件的各种变量。例如,我想找到这行

振幅= 100;并将其替换为:Amplitude = 200;所有文件。

我在线搜索过,仅找到一个文件的解决方案。我正在寻找在Matlab中做到这一点的方法。有什么想法吗?

2 个答案:

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