0

オンラインで見つけた次のコードを使用して、Perlスクリプトのプロパティファイルを読み取ります。

open (CONFIG, "myfile.properties");
while (CONFIG){
  chomp;     #no new line
  s/#.*//;   #no comments
  s/^\s+//;  #no leading white space
  s/\s+$//;  #no trailing white space
  next unless length;
  my ($var, $value) = split (/\s* = \s*/, $_, 2);
  $$var = $value;
}

このwhileループ内のテキストファイルにも書き込むことは可能ですか?テキストファイルが次のようになっているとしましょう。

#Some comments
a_variale = 5
a_path    = /home/user/path

write_to_this_variable = ""

どうすればテキストを入れることができますwrite_to_this_variableか?

4

2 に答える 2

1

可変長のレコード(行)があるテキストファイルを上書きすることは実際には実用的ではありません。ファイルをコピーするのは通常、次のようになります。

my $filename = 'myfile.properites';
open(my $in, '<', $filename) or die "Unable to open '$filename' for read: $!";

my $newfile = "$filename.new";
open(my $out, '>', $newfile) or die "Unable to open '$newfile' for write: $!";

while (<$in>) {
    s/(write_to_this_variable =) ""/$1 "some text"/;
    print $out;
}

close $in;
close $out;

rename $newfile,$filename or die "unable to rename '$newfile' to '$filename': $!";

英数字以外のテキストが含まれている場合のように、書いているテキストをサニタイズする必要がある場合が\Qあります。

于 2013-01-07T11:00:38.990 に答える
0

Config::Stdこれは、モジュールを使用して、自分のような単純な構成ファイルの書き込みを読み取るプログラムの例です。私の知る限り、元のファイルのコメントを保持するのはこのモジュールだけです。

注意すべき点が2つあります。

  1. の最初のハッシュキー$props{''}{write_to_this_variable}は、値を含む構成ファイルセクションの名前を形成します。ファイルに関してセクションがない場合は、ここで空の文字列を使用する必要があります

  2. 値を引用符で囲む必要がある場合は、ハッシュ要素に割り当てるときにこれらを明示的に追加する必要があります。'"Some text"'

プログラムの残りの部分は自明だと思います。

use strict;
use warnings;

use Config::Std { def_sep => ' = ' };

my %props;
read_config 'myfile.properties', %props;

$props{''}{write_to_this_variable} = '"Some text"';

write_config %props;

出力

#Some comments
a_variale = 5
a_path = /home/user/path

write_to_this_variable = "Some text"
于 2013-01-07T12:50:38.993 に答える