WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:CGI,for文を使いunshift指定するには?

0:[投稿] hal [2004/02/26 18:48 ][環境:IE6 Apache,CGI]

はじめまして。
Perlは勉強しはじめたばかりのものです。

<form name="form1">
<form name="form2">・・・
と、名前を統一させ、簡単に修正ができる
アンケートフォームを作ろうとしているのですが、

$form = 5;

for($no = 1; $no <= $form; $no++){
    $form[$no] =~ s/\"/""/g;
    print "\"";
    print $form[$no];
    print "\",";
    }

#書込み
    open(FILE, "<logfile.csv");
    flock(FILE, 1);
    @LOGDATA = <FILE>;
    close FILE;

    unshift (@LOGDATA, "???");

    open(FILE, ">logfile.csv");
    flock(FILE ,2);
    print FILE @LOGDATA;
    flock(FILE ,8);
    close(FILE);

ログを新しいものが上に来るようにしたいのですが、
unshift (@LOGDATA, "???");

ここに新規投稿された、$form[$no] 、for...文をどのように入れたらいいかわからず困っております。
・ライブラリとして何箇所かに設置したいと思っているのでunshift (@LOGDATA, "$form1,$form2");といった修正の必要になってくる書き方をしないで作りたいと思っています。
・ログはCSVで保存できるようにしています。(してるつもりです^^;)
5日考え頭から煙がでそうです..どなたか助言をよろしくお願い致します。


1:[回答] B-Cus [2004/02/27 02:19 ]

unshift(@LOGDATA, join(',', $form[1..$form])."\n");

とか。

可読性重視なら

my $newline='';
for($no = 1; $no <= $form; $no++){
  $newline .= $form[$no];
  if ( $no != $form ){
     $newline = ',';
  }
}
$newline .= "\n";
unshift(@LOGDATA, $newline);

など。


2:[回答] hal [2004/02/27 13:12 ]

この部分がよくわからずコンマ,入りで書込みがされなかったのですが
if ( $no != $a ){
    $newline = ',';
 }

試行錯誤の末こうなりました
    my $newline='';
    for($no = 1; $no <= $form; $no++){
    $newline .= "\"$form[$no]\",";
    }
    $newline .= "\n";
    unshift(@LOGDATA, $newline);

B-Cus様回答どうもありがとうございました。
もっとPerl勉強しますっ


3:[回答] hal [2004/02/27 13:19 ]

誤字でした。
if ( $no != $form ){
    $newline = ',';
 }


4:[回答] B-Cus [2004/02/27 14:22 ]

> この部分がよくわからずコンマ,入りで書込みがされなかったのですが
行末に余分なカンマが付かないように、という意図でしたが
うまく動かなかったようで失礼しました。

これも動作確認はしていませんが、正しくは
  if ( $no != $form ){
    $newline .= ',';
  }
ですかね (= (代入) ではなく .= (追加))。


5:[完了] hal [2004/02/28 18:19 ]

無事完成させることができました。
B-Cus様回答どうもありがとうございました。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World