重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

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

A 回答 (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;
---
こんなんでどうでしょう?
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/10/29 19:46

「前後のデータ」ですか。

。。

以下サンプルです

[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;
---

こんなんでどーでしょう?

この回答への補足

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

補足日時:2002/10/24 00:15
    • good
    • 0

考え方を少しかえれば出来ると思います。



開発言語が不明なので文章で甘く説明出来るか?疑問ですが。

変数を宣言
 SV(3)、DT

読込み
 DTへ

変数移動
 SV(3)=SV(2)
 SV(2)=SV(1)
 SV(1)=DT

比較
 SV(2)の内容が文字列と比較すれば
 前後(1、3)で解決できませんか?
    • good
    • 0
この回答へのお礼

ありがとうございます

お礼日時:2002/10/29 19:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!