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 に答える