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;
}
}
No.2ベストアンサー
- 回答日時:
特に問題ないようにみえますね。
なんらかのデバッグはされましたでしょうか。
print デバッグという最も基本的なデバッグ方法があります。
変数の値を実際に出力してみて確かめる方法です。
まず、プログラムのはじめのほうに、
(#!/usr/bin/perl の後ならどこでもよい)
use Data::Dumper;
の1行を記述します。
次に、
たとえば、$name2 ならば、
適当な箇所で、
warn '$name2: ', Dumper($name2);
のように記述します。
ハッシュ変数なら、
warn '%data: ', Dumper(%data);
といったぐあいです。
そして、プログラムを実行すると、変数の値が標準エラーに出力されます。
$a: $VAR1 = '_KINOU5_1b_1_';
期待通りの値が変数に格納されているかどうかを確かめてみてください。
ありがとうございます。表示する側のHTMLの変数に誤りがありました。。。表示されないので、絶対にプログラムがおかしいと思ってしまいました。上記実行しましたら期待通り格納されていましたので、その他の要因を探してわかりました。すみません。ありがとうございました。
No.1
- 回答日時:
なんかごちゃごちゃして解りづらいですが、$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=あ,お,か
もう少し具体的に何がどううまくいかないのか説明してもらえますか?
早々のご回答ありがとうございます。
表示する側のHTMLの変数に誤りがありました。。。
何も表示されないので、絶対にプログラムがおかしいと思ってしまいました。sakusaker7様の回答を拝見して、その他の要因を探してみて気付きました。
早とちりですみません。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- UNIX・Linux Linuxのシェル関数を作成して要件を満たす方法 1 2022/11/19 20:33
- その他(住宅・住まい) 重量ブロックの施工について 3 2023/07/11 17:21
- プリンタ・スキャナー プリンタ買おうと思ってます。キヤノンCanonがいいと思ってます。今まで使っていて十分機能満たしてい 6 2022/08/01 15:48
- 相続・譲渡・売却 隣地所有のCBブロックの安全確保に関して 土地(更地)を購入し、新規に家を建てます。 現在土地契約済 3 2023/03/20 21:53
- 計算機科学 かっこ3番ってなぜCD垂直ABを示せたら、CA=CBを示せるのですか? 1 2022/07/15 22:28
- 統計学 質問です! 10 2022/08/18 10:16
- JavaScript 配列の1要素を代入した変数を使って元の配列要素を削除できるか 1 2023/07/28 03:34
- その他(趣味・アウトドア・車) フリーライセンス無線家の方々にお伺いします。 合法CBの呼出チャンネルの8チャンネルでCQを出した後 1 2023/03/21 12:49
- 囲碁・将棋 この前引退した桐山さんってスゴい棋士だったんだな。 1 2022/06/22 20:13
- 国産車 アクセルをベタ踏みしたくなる。 4 2022/05/06 19:39
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ポインター引数の関数でコンパ...
-
stable diffusionのエラー
-
POSTで配列のデータを渡す方法は?
-
pythonでDBのカラム名で取得し...
-
C言語 構造体の名前欄?を小文...
-
平滑化フィルタ
-
パイソン、データーサイエンス...
-
matlabでのRRI検出
-
テキストファイルの結合について
-
基本クラスのポインタから、特...
-
ループ変数の変更
-
printfの%eで指数部分の桁数を...
-
花の名前を教えて下さい。
-
10Mバイトて文字数に すると何...
-
Excel VBA メール作成について ...
-
ビットスワップとバイトスワッ...
-
number 改行が追加できない
-
UTF-8で5~6バイトになる文字コ...
-
Rstudioによるテキストマイニン...
-
char str[256]の256の意味は?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ポインター引数の関数でコンパ...
-
stable diffusionのエラー
-
printfの%eで指数部分の桁数を...
-
エクセルVBA:日付データの変換...
-
int型(2バイト)データの分割
-
c言語の多次元配列で1から100ま...
-
C#でのswitch文
-
【Excel VBA】10進数を2進数に...
-
途中経過も表示するプログラム
-
CreateProcessでの環境変数の設...
-
pythonでDBのカラム名で取得し...
-
C言語についてです! 同じ年の...
-
linuxのシェルでファイル名に先...
-
c言語 配列から数字だけをint型...
-
c言語での wavファイルの編集(...
-
matlabのソースコードをpython...
-
ビットデータのチェック方法
-
10個の実数に対する降順ソート...
-
python 気象データの取得
-
C言語の構造体にてバブルソート...
おすすめ情報