Perl(CGI)のプログラムを作成しているのですが

'金額=(税抜2000円) 2100円'という文字列を'[単価]2100円'に置換したいのですがうまくいきません。数字の箇所常には変わります。置換演算子で試してみましたが私の知識ではダメでした。周りに聞ける者がおりませんのでご教示お願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

拝見したところ必要な情報は、税込みの2100円ということですので


スマートな方法としてPerlのパターンマッチ演算子(m//)を使い、ここで必要な値(2100円)を取得する事ができます。

あとは取得した値の前に"[単価]"文字列を追加します。

以下の内容でいかがでしょうか。ご参考になればと思います。

#!/usr/bin/perl
use strict;
use warnings;
use utf8;

my $text = '金額=(税抜2000円)2100円';
my ($zeikomi) = $text =~ m/(\d+円)$/;
print '[単価]'. $zeikomi;
    • good
    • 0

 Shift_JISで問題となる文字は、少なくともこの例にはないようですが、基本は、データを一旦、EUCないしUTFに変換して処理すべきです。


 ここで大事なことは、正規表現で、その文書の中に登場する被置換候補は、'金額=\(税抜2000円\) 2100円'という文字列だけで、
'金額=(税抜3000円) 3150円'などは無いということでしたら、
$original = '金額=\(税抜2000円\)';
$new = '[単価]2100円';
・・・
まあ、金額が色々あり、複数個所あるなら、下のように!

Sample__________________
#!/usr/local/bin/perl
use strict;
my $original='金額=\(税抜.*?円\) ';
my $new = '[単価]';
open(IN,"test.txt"),or die;
open(OUT,">new.txt"),or die;
while(<IN>){
s/$original/$new/g;
print OUT $_;
}
__END__
金額=(税抜.*?円) --最小マッチでこの文字列を[単価]に変更
^^^^^^^^^^^^^^^^^
随所にあるので gが必要
    • good
    • 0

my $s = '金額=(税抜2000円) 2100円';


$s =~ s/金額=\(税抜\d+円\)\s+(\d+)円/[単価]$1円/;
print $s;

メタキャラである '(' ')' をエスケープしていないのが原因です。
この場合に限れば、文字コードは関係ありません。

ただ、別の問題が出たりしないよう、UTF8に変換して処理した方がいいと思います。
    • good
    • 0

a$ = '金額=(税抜2000円)2100円' ;


a$ =~ s/金額=(税抜\d+円)/\[単価\]/ ;

これでダメですかね。
文字コードはEUCを使って。

この回答への補足

回答ありがとうございます。
変換されないのですが文字コードSHIFT-JISが問題でしょうか?
該当の変数だけEUCに変換してみます

補足日時:2009/05/28 18:13
    • good
    • 0

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


人気Q&Aランキング

おすすめ情報