• ベストアンサー

文字列を置換え

ある特定の文字列を別の文字列に置き換えたいのですが その置き換える前後のデータをファイルから読み込むようにしたいのですが どのようにしたらよいでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • nipotan
  • ベストアンサー率59% (134/227)
回答No.3

> すみません 質問の仕方に問題があったようです > ある文字列の特定の単語を別の単語に置き換えたいです > そのとき置き換える単語は複数あってそれの一覧をファイルから読めるようにしたいのですがどうしたらよいでしょう? #2 の答えではヒントにならないですか? 質問の仕方云々のせいで二つもコーディングパターンを作らないといけないのはかなり癪です。 ご自身の努力ではどの程度までいったんでしょうかね。 サンプルとして、 [chikan.dat] --- # 置換対象の文字 TARGET = あら! TARGET = おや! TARGET = まあ! TARGET = やあ! # 置換後の文字 REPLACED = なんてこったい! --- [chikan.pl] --- # 元の文字列 my $string = q{あら!あんなところにryuta_moがいるわ おや!あんなところにnipotanがいるよ まあ!ryuta_mo やあ!nipotan おひさしぶり}; # データファイルからの読込みを格納するハッシュ my %data = (); # データ取得 open FH, 'chikan.dat' || die $!; while(<FH>){ next if /^\s*#/; next if /^\s*$/; chomp; if(/^(.+?)\s*=\s*(.+)$/){ $data{$1} .= "\0" if(exists $data{$1}); $data{$1} .= $2; } } close FH; # 置換処理 map{ $string =~ s/\Q$_\E/$data{REPLACED}/g }(split /\0/, $data{TARGET}); # 画面出力 print $string; --- こんなんでどうでしょう?

ryuta_mo
質問者

お礼

ありがとうございます 無事解決しました

その他の回答 (2)

  • nipotan
  • ベストアンサー率59% (134/227)
回答No.2

「前後のデータ」ですか。。。 以下サンプルです [chikan.dat] --- # 置換対象の前の文字 PREVIOUS = これは # 置換対象の後ろの文字 BACK = データです # 置換後の文字 REPLACED = ほげほげ~ --- [chikan.pl] --- # 元の文字列 my $string = 'これは元の文章が記載されたデータです'; # データファイルからの読込みを格納するハッシュ my %data = (); # データ取得 open FH, 'chikan.dat' || die $!; while(<FH>){ next if /^\s*#/; next if /^\s*$/; chomp; $data{$1} = $2 if /^(.+?)\s*=\s*(.+)$/ } close FH; # 置換処理 $string =~ s{(\Q$data{PREVIOUS}\E)(?:.*?)(\Q$data{BACK}\E)} {$1$data{REPLACED}$2}g; # 画面出力 print $string; --- こんなんでどーでしょう?

ryuta_mo
質問者

補足

すみません 質問の仕方に問題があったようです ある文字列の特定の単語を別の単語に置き換えたいです そのとき置き換える単語は複数あってそれの一覧をファイルから読めるようにしたいのですがどうしたらよいでしょう?

  • kz2960
  • ベストアンサー率21% (33/154)
回答No.1

考え方を少しかえれば出来ると思います。 開発言語が不明なので文章で甘く説明出来るか?疑問ですが。 変数を宣言  SV(3)、DT 読込み  DTへ 変数移動  SV(3)=SV(2)  SV(2)=SV(1)  SV(1)=DT 比較  SV(2)の内容が文字列と比較すれば  前後(1、3)で解決できませんか?

ryuta_mo
質問者

お礼

ありがとうございます

関連するQ&A