旅行好きのおしりトラブル対策グッズ3選

Perl初心者です。
ある条件にしたがって文字を結合したいのですが、なかなかうまくいきません。以下のように記述してみたのですが何かヒントございましたらお教え願えませんでしょうか。

実現したいのは、たとえばQ5_1a_1_CB_1とQ5_1a_1_CB_3が"1"だったら_KINOU5_1a_1_に「あ,う」、Q5_1b_1_CB_1とQ5_1b_1_CB_5とQ5_1b_1_CB_6が"1"だったら_KINOU5_1b_1_に「あ,お,か」と代入したいのです。
想像では「$kinou .= $z.",";」のところが何か不足しているような気がします。

for($i=1; $i<=14; $i++){
for ($j=1; $j<=3; $j++){
$c = ('','a','b','c','d','e','f','g','h','i','j','k','l','m','n',)[$i];
$name2 = "_KINOU5_1".$c."_"."$j"."_";
$kinou = "";
for ($k=1; $k<=11; $k++){
$z = ('','あ','い','う','え','お','か','き','く','け','こ','さ',)[$k];
$name3 = "Q5_1".$c."_"."$j"."_CB_".$k;
if ($data{$name3} eq '1'){
$kinou .= $z.",";
}
}
chop $kinou;
$newtemplate =~ s/$name2/$kinou/g;
}
}

A 回答 (2件)

特に問題ないようにみえますね。



なんらかのデバッグはされましたでしょうか。

print デバッグという最も基本的なデバッグ方法があります。

変数の値を実際に出力してみて確かめる方法です。

まず、プログラムのはじめのほうに、
(#!/usr/bin/perl の後ならどこでもよい)

use Data::Dumper;

の1行を記述します。

次に、
たとえば、$name2 ならば、
適当な箇所で、
warn '$name2: ', Dumper($name2);

のように記述します。

ハッシュ変数なら、

warn '%data: ', Dumper(%data);

といったぐあいです。


そして、プログラムを実行すると、変数の値が標準エラーに出力されます。

$a: $VAR1 = '_KINOU5_1b_1_';

期待通りの値が変数に格納されているかどうかを確かめてみてください。
    • good
    • 0
この回答へのお礼

ありがとうございます。表示する側のHTMLの変数に誤りがありました。。。表示されないので、絶対にプログラムがおかしいと思ってしまいました。上記実行しましたら期待通り格納されていましたので、その他の要因を探してわかりました。すみません。ありがとうございました。

お礼日時:2008/02/05 14:38

なんかごちゃごちゃして解りづらいですが、$kinouは希望通りの文字列になってませんか?



my %data = (
Q5_1a_1_CB_1 => "1",
Q5_1a_1_CB_3 => "1",
Q5_1b_1_CB_1 => "1",
Q5_1b_1_CB_5 => "1",
Q5_1b_1_CB_6 => "1"
);

for($i=1; $i<=14; $i++){
for ($j=1; $j<=3; $j++){
$c = ('','a','b','c','d','e','f','g','h','i','j','k','l','m','n',)[$i];
$name2 = "_KINOU5_1".$c."_"."$j"."_";
$kinou = "";
for ($k=1; $k<=11; $k++){
$z = ('','あ','い','う','え','お','か','き','く','け','こ','さ',)[$k];
$name3 = "Q5_1".$c."_"."$j"."_CB_".$k;
if ($data{$name3} eq '1'){
$kinou .= $z.",";
}
}
chop $kinou;
#$newtemplate =~ s/$name2/$kinou/g;
print "\$name2=$name2, \$kinou=$kinou\n" if $kinou ne q{};
}
}

print "######\n";

foreach my $c (qw(a b c d e f g h i j k l m n)) {
foreach $j (1..3) {
my $name2 = sprintf "_KINOU5_1%s_%d_", $c, $j;
my $k;
my @tmp;
foreach $z (qw(あ い う え お か き く け こ さ)) {
my $name3 = sprintf "Q5_1%s_%d_CB_%d", $c, $j, ++$k;
push @tmp, $z if $data{$name3} eq '1'
}
my $kinou = join q{,}, @tmp;
print "\$name2=$name2, \$kinou=$kinou\n" if $kinou ne q{};
#$newtemplate =~ s/$name2/$kinou/g;
}
}
実行結果:
$name2=_KINOU5_1a_1_, $kinou=あ,う
$name2=_KINOU5_1b_1_, $kinou=あ,お,か
######
$name2=_KINOU5_1a_1_, $kinou=あ,う
$name2=_KINOU5_1b_1_, $kinou=あ,お,か

もう少し具体的に何がどううまくいかないのか説明してもらえますか?
    • good
    • 0
この回答へのお礼

早々のご回答ありがとうございます。
表示する側のHTMLの変数に誤りがありました。。。
何も表示されないので、絶対にプログラムがおかしいと思ってしまいました。sakusaker7様の回答を拝見して、その他の要因を探してみて気付きました。
早とちりですみません。ありがとうございました。

お礼日時:2008/02/05 14:40

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


人気Q&Aランキング