在Matlab中写入文本文件中的特定位置

时间:2014-06-27 14:48:14

标签: matlab

我有一个属性文件config.properties,另一个程序将使用该文件,格式必须为:

#Comment
property1=value1

#Comment
property2=value2

#Comment
property3=value3

我在Matlab中的程序需要修改value2而不更改文件的其余部分。我希望有一种方法可以搜索property2,然后在" ="之后覆盖这个数字。但是当文件中没有分隔符时,我找不到关于如何写入特定位置的预先存在的文件的任何内容。

我的问题是:如何更改value2而不更改文件的其余部分?

注意:Matlab代码将在运行时多次访问和更改value2,因此唯一的位置未知的时间将是第一次。每次更改后都必须关闭该文件,以允许其他程序访问。

1 个答案:

答案 0 :(得分:2)

这是一个非常笨重的解决方案,但它确实有效。

fid = fopen('test.txt','r');

prop_to_change = 'property2';
newvalue = 'new value';

% Find the PV pair to change
while ~feof(fid)
    tline = fgetl(fid);
    temp = strsplit(tline,'='); % Split the PV Pair into 2 cells
    if strcmp(temp{1},prop_to_change)
        newline = strrep(tline,temp{2},newvalue);
        frewind(fid); % Go back to start of the file
        fulltext = fread(fid,'*char')'; % Grab entire file prior to discarding
        fclose(fid);
        fid = fopen('test.txt','w'); % Loading with write flag discards the file contents
        fulltext = strrep(fulltext,tline,newline); % Replace PV pair
        fprintf(fid,'%s',fulltext); % Write modified text back to file
        fclose(fid);
        break
    end
end

test.txt现在显示为:

#Comment
property1=value1

#Comment
property2=new value

#Comment
property3=value3

阅读单个行然后阅读整个事情似乎是很多不必要的开销。我选择这样做是因为我想不出更简单的方法来拉动PV对而不明确知道现有的价值。使用正则表达式可能会做得更好,但我对如何使用它们的工作知之甚少。