我有一个属性文件config.properties,另一个程序将使用该文件,格式必须为:
#Comment
property1=value1
#Comment
property2=value2
#Comment
property3=value3
我在Matlab中的程序需要修改value2而不更改文件的其余部分。我希望有一种方法可以搜索property2,然后在" ="之后覆盖这个数字。但是当文件中没有分隔符时,我找不到关于如何写入特定位置的预先存在的文件的任何内容。
我的问题是:如何更改value2而不更改文件的其余部分?
注意:Matlab代码将在运行时多次访问和更改value2,因此唯一的位置未知的时间将是第一次。每次更改后都必须关闭该文件,以允许其他程序访问。
答案 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对而不明确知道现有的价值。使用正则表达式可能会做得更好,但我对如何使用它们的工作知之甚少。