• ベストアンサー

変数の書き方

open(SIN,"$file") || &error("Error"); $data = <SIN>; close(SIN); ($data1,$data2,$data3,$data4,$data5) = split(/<>/, $data); $i=0; while ($i < 5) { $i++; print "<input type=text name=data$i size=70 value=\"$data$i\">\n"; } valueの所に $data1 $data2 $data3 $data4 $data5 と呼び出したいのですが、上記のように記入するとvalueのところには$i(数字)が呼び出されてしまいます。 繰り返し文の場所に上記のように変数を入れていくには、どのようにすればよろしいのでしょうか?

  • Perl
  • 回答数2
  • ありがとう数5

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

  • ベストアンサー
  • t-okura
  • ベストアンサー率75% (253/335)
回答No.2

print "<input type=text name=data$i size=70 value=\"${\"data$i\"}\">\n"; とすればよいです。 しかし、ここはすなおに配列を使って my @data = split(/<>/, $data); my $i = 0; while ($i < 5) { $i++; print "<input type=text name=data$i size=70 value=\"$data[$i-1]\">\n"; } みたいにした方が楽だと思います。

cocolink
質問者

お礼

ご回答ありがとうございます。 if ($i ==1) {$data = $data1; } elsif ($i ==2) {$data = $data2;} elsif ($i ==3) {$data = $data3;} elsif ($i ==4) {$data = $data4;} elsif ($i ==5) {$data = $data5;} 適当にこんな感じでやってみたのですが、登録量が増えてくるとこれでは大変でした。 教えていただいた、一行目の方法を使わせていただきます。 ご親切に感謝いたします。

その他の回答 (1)

  • kabaokaba
  • ベストアンサー率51% (724/1416)
回答No.1

配列のまま使うだけ open my $SIN, <, "$file" || error("Error"); my @data = split(/<>/, $SIN); close $SIN; for (0..5){ print "<input type=text name=data$i size=70 value=\"$data[$_]\">\n"; }

cocolink
質問者

お礼

ご回答ありがとうございます。 分かりやすいご説明に感謝いたします。

関連するQ&A

  • javascriptにphpの変数を用いる

    JavaScriptでサブウインドウのフォームから親ウインドウのフォームにデータを送るプログラムを書いています。 親ウインドウのページによって処理を変えているのですが、phpの変数を使うと関数自体がエラーになってしまいます。 どう書くのが正しいのでしょうか?教えてください。 プログラムは下記です。 if(page=="0"){ window.opener.document.form_name.input_name.value=input_data; window.close(); } else{   for(i=1; i<6; i++){     var pagename = "page_"+i;     if(page == pagename){ window.opener.document.<?php echo $_GET[form_name]; ?>.<?php echo $_GET[input_name]; ?>.value=input_data; window.close();   } }

  • Perl ブログ等の記事の編集

    記事の編集について教えてください。 ブログ等の記事を書き込むまではできました。 そこで、書き込んだ後に、記事を編集・修正をしたいと思い ソースを考えているのですが、 わからなくなりました。 お力添えをお願い致します。 #log.txt 1,test1,name1,text1 2,test2,name2,text2 3,test3,name3,text3 4,test4,name4,text4 5,test5,name5,text5 open(FILE, "<$FILE") or die("error :$!"); eval{ flock(FILE, 1) }; @DATA = <FILE>; close FILE; #記事表示 for ($i=0;$i<5;$i++){ last if ($i > @DATA); $data = $DATA[$i]; if ($data ne ""){ my ($category,$title,$name,$text) = split(/,/, $data); print qq(<input type="radio" name="no" value="%02d">$category - $title - $name - $text\n), $i; print qq(<input type="submit" name="edit" value="編集">\n); print qq(<input type="submit" name="delete" value="削除">\n); } } そこで、radioボタンを選択し、 submit「編集」をクリックすると radioボタンで選択されている行のデータを取り出し 修正をするということをしたいのですが、どのようにすればいいでしょうか? 今回の求めている結果ですと log.txtの3行目を取り出し 3,test3,name3,text3 ↓ 3,hen3,kou3,henkou3 にして 最終的なlog.txtは 1,test1,name1,text1 2,test2,name2,text2 3,hen3,kou3,henkou3 4,test4,name4,text4 5,test5,name5,text5 というふうにしたいです。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • WSH

    こんにちは。 下記のようなものを作りたいのですが、動きません。 どう記述するものなのでしょうか? おかしい部分はループ内の"I"です。 HTMLでフォームをおき、一列(4つ)一組として、三列用意しました。たとえば、 あ い う え か き く け さ し す せ と各テキストボックスに入力し、実行ボタンを押したとき、テキストファイルには、 あ,い,う,え か,き,く,け さ,し,す,せ と書き込まれるようにしたいのです。 下記、ソースです。 よろしくお願いいたします。 <script language=vbscript> <!-- Sub ok_OnClick dim o,p,q,r,str,I,n n=3 Set fso = CreateObject("Scripting.FileSystemObject") Set tmpFile = fso.CreateTextFile("a.txt") for I =1 to n o=File[I]Name1.value p=File[I]Name2.value q=File[I]Name3.value r=File[I]Name4.value str=o+","+p+","+q+","+r tmpFile.WriteLine(str) loop tmpFile.close Set tmpFile = Nothing Set fso = Nothing End Sub --> </script> <html><body><center> <input type=text name=File1Name1 value=""> <input type=text name=File1Name2 value=""> <input type=text name=File1Name3 value=""> <input type=text name=File1Name4 value=""><br> <input type=text name=File2Name1 value=""> <input type=text name=File2Name2 value=""> <input type=text name=File2Name3 value=""> <input type=text name=File2Name4 value=""><br> <input type=text name=File3Name1 value=""> <input type=text name=File3Name2 value=""> <input type=text name=File3Name3 value=""> <input type=text name=File3Name4 value=""><br><br><br> <input type=button name=ok value=登録></center> </body> </html>

  • JavaScriptでの変数で数値を使った場合の疑問

    JavaScriptでの変数で数値を使った場合の疑問 <form action="sample.cgi" name="fm"> <button onclick="allInput()">全入力</button> <input size="10" type="text" name="hoge1" value=""> <input size="10" type="text" name="hoge2" value=""> <input size="10" type="text" name="hoge3" value=""> ・・・・ <input size="10" type="text" name="hoge30" value=""> </form> 上記のようなフォームがあったとします。 hoge1~hoge30まであるためにうけとる方法をforで受け取りたいのです。 <script Language="JavaScript"> function allInput() { for ( var i = 1; i <=30; i++ ) { document.fm.hoge+i.value = document.fm.hoge1.value; //上のiのところで1から30を文字列としたい } } </script> 内部的には document.fm.hoge2.value = document.fm.hoge1.value; document.fm.hoge3.value = document.fm.hoge1.value; document.fm.hoge4.value = document.fm.hoge1.value; ・・・ document.fm.hoge30.value = document.fm.hoge1.value; のようになっていきばいいのですが・・・ たとえになるかわかりませんが、Perlだと下のように$iの変数を文字列として扱えるのですが・・・ for ($i=1;$i <= 30; $i++){ ${"sample$i"} = param("hoge$i"); } よろしくお願いいたします。

  • フォームの項目に付ける名前を、変数にしたい

    PHP ver.5.2.3です <INPUT type="text" name="a1" value=""> <INPUT type="text" name="a2" value=""> ・ ・ ・ の"a1"の部分を変数にして、複数回表示させたいのですが、 方法はありますか?

    • ベストアンサー
    • PHP
  • 配列変数について

    とても基本的なことなのですが <script l anguage = "JavaScript"> week = new Array("日", "月", "火", "水", "木", "金", "土"); hizuke = new Date( ); day = hizuke.getDay( ); document.write("今日の日付 = ", hizuke.getMonth( ) + 1, "月 ", hizuke.getDate( ), "日 ", week[ day ], "曜日" ); </script> このような配列変数ならば、new Date( )によって呼び出された日付に対応して week[ day ]のところが日付に変わることはわかります。 <head> <title> Java </title> <script language = "JavaScript"> function calc( ) { point = new Array( ); point[0] = ei.value * 1; point[1] = su.value * 1 ; point[2] = ko.value * 1; sum = 0; for( i = 0 ; i < 3 ; i ++) { sum += point[i ]; } goukei .val ue = sum; ave = sum / 3; heikin.value = ave; } </script> </head> <body> <hr> <br> 英語 <input type = "text" size = "8" name = "ei "> <br> <br> 数学 <input type = "text" size = "8" name = "su"> <br> <br> 国語 <input type = "text" size = "8" name = "ko"> <br> <br> <hr> <br> <input type = "button" value = "計算" onclick = "calc( )"> <br> <br>3教科合計 <input type = "text" size = "8" name = "goukei "> 点 : 平均点 <input type = "text" size = "8" name = "heikin"> <br> <br> <hr> </body> </html > このような平均点を求めるプログラムでも point = new Array( ); point[0] = ei.value * 1; point[1] = su.value * 1 ; point[2] = ko.value * 1; sum = 0; for( i = 0 ; i < 3 ; i ++) { sum += point[i ]; このように配列変数を使っているのですが、なぜ配列変数をこのように使っているのかが わかりません。 なぜ、平均点を出すときはnew Array( )の( )の中身は何もなくて、上記のような表現を しているのでしょうか? よろしくお願いします。。

  • 変数の表示の仕方(改行の扱い)

    perl初心者です。よろしくお願いします。 ひとつの変数で、print関数での表示とテキストエリアでの表示を しようとしているのですが、改行の扱いに困っています。 テキストエリアで<br>を表示させないようにすると、print関数の 方の改行がなくなるし、print関数の方に改行させると、テキスト エリアで<br>が表示されるし・・・。 print関数で改行、テキストエリアでは<br>が出ずに改行という 風にしたいのですが、どなたかご教授していただけませんか? よろしくお願いします。 #!/usr/local/bin/perl use strict; #データファイル my $datafile='./data.dat'; #ライブラリの読み込み require './jcode.pl'; my $input; #フォームデータの読み込み if ($ENV{REQUEST_METHOD} eq "POST"){ read (STDIN,$input,$ENV{CONTENT_LENGTH}); }else{ $input=$ENV{QUERY_STRING}; } #フォームデータのデコード my %form = (); my @pairs = split(/&/, $input); foreach my $pair ( @pairs ){ my( $name, $value ) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("H2", $1)/eg; #SJISコード変換 &jcode::convert(\$value, 'sjis'); $value =~ s/\r\n/<br>/g; $value =~ s/\r/<br>/g; $value =~ s/\n/<br>/g; $form{$name} = $value; } #データのオープン open(DAT,"+<$datafile"); flock(DAT, 2); #ファイル読み込み my $line = <DAT>; for ( split /\t/ , $line ) { my( $key , $value ) = $_ =~ /^([^=]*)=(.*)$/; #フォームデータの上書き $form{$key} ||= $value; } #データの書き込みとクローズ seek(DAT,0,0); $line = ''; while (my($key,$value) = each %form) { $line .= "${key}=${value}\t"; } print DAT $line; close(DAT); &header; print $form{A}; print "<br>"; print $form{B}; print "<br>"; print $form{C}; print "<br>"; print <<EOM; <b>[内容確認]</b> <form action="new.cgi" method="POST"> <INPUT TYPE="text" SIZE="27" name="A" value="$form{A}"><br> <INPUT TYPE="text" SIZE="90" name="B" value="$form{B}"><br> <TEXTAREA name="C" ROWS="2" COLS="27">$form{C}</TEXTAREA><br> <input type="submit" value="上記内容で送信"> </form> <br> </body> </html> EOM exit; #----------------------------------------------------------------------------------- # HTMLヘッダー #----------------------------------------------------------------------------------- 割愛

    • ベストアンサー
    • Perl
  • 変数の書き方について

    下記のようなプログラムを作成しました。 この状態で20行目のechoを実行しても何も表示されません。 15行目にある$emailを表示させるためには、 19行目と20行目の辺りになんらかの変数を書かなければならないと思うのですが、 具体的にはどのような内容を記載すればよろしいのでしょうか? ご教授のほどよろしくお願いします。 1:<form method="post" action="<?=$_SERVER["PHP_SELF"]?>"> 2:<input type="hidden" name="act" value="updconf"> 3:<input type="hidden" name="roomid" value="<?=$roomid ?>"> 4:<input type="hidden" name="hiduke" value="<?=$hiduke?>"> 5:<input type="hidden" name="jikan" value="<?=$jikan?>"> 6:<input type="submit" name="sub" value="予約更新"> 7:</td> 8:<td>お名前</td> 9:<td> 10:<input type="text" name="yoyakusha" value="<?=$user ?>"> 11:</td> 12:</tr> 13:<tr> 14:<td>メールアドレス</td> 15:<td><input type="text" name="email" value="<?=$email ?>"></td> 16:</tr> 17:</form> 18: 19:<?php 20:echo $email; 21:?>

    • ベストアンサー
    • PHP
  • value内に変数を入れたい

    お世話になります。 <INPUT type="text" name="seikai" size="10" value="" onfocus="this.blur()"> このvalue=""の中にjavascriptで定義した変数を入れる方法ってあるんでしょうか? 

  • foreachでループした変数を他のサブルーチンに受け渡す方法を教えてください。

    ループして変数に入る値を他のサブルーチンに渡すにはどのようにしたらいいのでしょうか?以下に記述を書きましたが、sub mainの中の$dataをsub htmlの中で表示させて、sub mainでループさせた値をすべてsub mailへわたしたいのです、hiddenタグで<input type=\"hidden\" name=\"all\" value=\"$all\">とやってもうまくいきませんでした。@inの中をループさせるので@inをそのままかけばいいのでしょうか?これもうまくいきませんでした。。ようはループさせた値をすべてメールで送信したいのです。どうしたらうまくできますでしょうか? sub main{ foreach(@in){ ($name1,$value1) = split(/=/,$_); $data="$name1 : $value1"; print "$data"; print "<br>"; } sub html{ print "Content-type: text/html\n\n"; print <<EOF; <html> <head> </head> <body> &main; <form action="" method=""> <input type=\"hidden\" name=\"all\" value=\"$all\"> <input type=\"submit\" value=\"送信する\"> </form> </body> </html> EOF } sub mail { ####省略しますが、ここはメールの送信の記述です。 }

    • ベストアンサー
    • Perl