我想更新包含属性 - 值对的txt文件中的一行,其中属性位于方括号之间,其值在下面的行中。这是一个示例文件:除此之外,我想忽略以'#'开头的注释行。另一方面,如果我想在评论专栏中添加评论,该怎么办?
#===========================
#===========================
[system]
# comment
programming
#===========================
[information]
#
application
在这个例子中,“系统”是一个属性,并且“编程”它的值。同样,'信息'是另一种属性,'应用'是它的价值。
我想用属性 - 值对调用我的函数并更新txt文件中的相应值。到现在为止,我有以下内容:
fh = fopen(filename,'r');
fh= fopen(filename,'w');
while ~feof
line = fgetl(fh);
if(line(1) == '[') && (line(end) == ']')
value = lower(line(2:end-1));
然后我会将'value'与我的输入进行比较,以检查它是否与属性匹配。如果是这样,我应该使用新输入更新下一行。最后,我必须写入原始文件。
对于此示例txt,如何将“编程”一词更新为“系统信息”?
答案 0 :(得分:1)
怎么样
function [] = updateFile( fileName, propName, newProbVal )
%
% update file fileName, replacing the value of propName with newPropVal
%
% all inputs are strings
%
rfh = fopen( fileName, 'r' ); % read handle
tname = tempname(); % temporary file name
wfh = fopen( tname, 'w' );
% read line by line
foundFlag = false;
line = fgetl( rfh );
while ischar(line)
if foundFlag
fprintf( wfh, '%s\r\n', newProbVal );
foundFlag = false;
else
fprintf( wfh, '%s\r\n', line );
end
tks = regexp( line, ['^\[',propName,'\]'] );
foundFlag = ~isempty(tks);
line = fgetl( rfh );
end
fclose( rfh );
fclose( wfh );
movefile( tname, fileName, 'f' ); % rename temp file name