2

我想更新包含属性值对的 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)); 

然后我会将“值”与我的输入进行比较,以检查它是否与属性匹配。如果是这样,我应该用新输入更新下一行。最后我必须写入原始文件。

对于此示例 txt,我如何将“编程”一词更新为“系统信息”?

4

1 回答 1

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
于 2013-01-16T13:58:28.997 回答