電子書籍の厳選無料作品が豊富!

下記のようなスクリプトがあります。
これは、CSVファイルを1行表示し、編集可能にするスクリプトの1行表示部分です。
これを全行表示するスクリプトに変更したいと考えています。
while ($cnt) {
foreach(@csv2){  ..............................
}
}
とすると無限ループするようです。(サーバーが固まる)
webで調べたのですが、$cnt = '1'or die "$!"としても抜けだせません。
行が無くなったら作業を終了するとしたいのですが、どうすればいいでしょうか?
初歩的な質問で恐縮なのですが、レンタルサーバーをこれ以上固まらせるわけ
にもいかないため、ご教授頂ければと思います。


@csv2 = split(/\<>/,$csv[$param{'num'}]);
$cnt = '1';
foreach(@csv2){
&trString(\$_, "1",);
if($_ eq $csv2[-1]){ chomp($_); }
print "<tr>\n";
print qq|<td><input type="text" name="$cnt" size="30" value="$_"></td>|;
print "</tr>\n";
$cnt++;
}

A 回答 (2件)

みた感じ、質問文内のスクリプトは、


(1)配列@csvから1行抽出。
(2)抽出したものを分割したものをinputコントロールとして出力。
――としているので、全行出力するなら、@csvについてループさせる必要があります。

なので、$cntを操作しても、うまくいかないかと。
$cntは、1行を分割した個々の要素を数えるのに使っているので。

たとえば、質問文スクリプトをサブルーチン化して、@csvの各行に対してそれを呼び出すようにするとかいった方向でスクリプトを書き換えてみては。

この回答への補足

ご回答大変ありがとうございます。
大変申し訳ございません。
当方、プログラマではなく、落ちてるCGIを弄る程度しか出来ず、基本的なことを学んでおりません。
サーバーが固まっても構いませんので、ざっくりとしたやり方をご教授いただけませんでしょうか?

補足日時:2011/01/29 21:14
    • good
    • 0

たとえば、こんなのとか:



sub makeform_edit_csv_by_line(){
my( $csv, $line_number ) = @_;
my @csv2 = split(/<>/, $csv );
my $cnt = 1;
print "<tr>\n";
foreach( @csv2 ){
&trString(\$_, "1", ); if( $_ eq $csv2[-1] ){ chomp($_); }
print qq|<td><input type="text" name="${line_number}_${cnt}" size="30" value="${_}"></td>|;
$cnt++;
}
print "</tr>\n";
}

参考URL:http://www.ideone.com/urlLA
    • good
    • 0

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