カレッヂ |
質問者 koba
投稿日 2/14(水) 17:45:51
マジでわかりません。 だれかたすけて〜〜! ちなみに、csvファイルを読み込もうとしてます。 ソース書いときます。 open(FILE, "cgi.csv"); @logs = <FILE>; close(FILE); print "<H3>名簿リスト</H3><UL>"; foreach $data(@logs){ ($obje, $code, $name, $rete) = split(",", $data); print "<LI>対象:$obje, 符号:$code, 名称:$name, 滞留:$rete,<BR>\n"; } print "</UL>"; ここ以外考えられません。 誰か教えてください。 お願いします!! |
回答者 しあわせのツボ
[削除]
投稿日 2/14(水) 19:02:38
Syntax OK が出ているのなら、コードは問題ないと思います(期待した通りに動くかは別として)。 文法チェックはローカルで行いましたか、それともサーバ上で行いましたか? 返ってくるエラーはサーバによるものですか、それともCGIによるものですか? とりあえずありがちなものを。 設置するディレクトリや拡張子は正しいですか? パーミッションは正しく設定されていますか? Content-Type: text/html のヘッダは出力していますか? |
質問者 koba
[削除]
投稿日 2/14(水) 19:12:31
返答ありがとうございました。 いらないものを省いて、書き直してみたら 動きました。 何分初心者なもので・・・。open(FILE, "cgi.csv"); @logs = <FILE>; close(FILE); foreach $data(@logs){ ($obje, $code, $name, $rete) = split(",", $data); #print "$obje, $code, $name, $rete,\n"; } ・・・このようにしたら、動きました。 ちなみに、文法チェックもエラーも、サーバー上です。 今は、これをループさせようと、四苦八苦してます(笑) 多分、それなりのデーターをはきだす事になると思うのですが、 今の段階では、一行しか表示されないからです。 仕事でperl書いてるんですけど、周りは誰もperl知らないし、 あたしも初心者なので、かなり、へこんでます。 あ、これは、ただの愚痴だった(笑) ほんとに、初歩的な質問でごめんなさい・・・。 |
回答者 さくら
[削除]
投稿日 2/15(木) 01:53:11
ローカルマシンで編集している、ファイルの改行コードは、どうなっていますか? ラインフィード(LF)になっていますか? \n の事です。 macでは、キャリッジリターン(CR)です。 \r の事です。 winでは キャリッジリターンラインフィード(CRLF)です。 \r\n の事です。 unix サーバーの設定によっては、ラインフィード(LF) になっていないと、 サーバーエラーが発生する場合があるようですよ。 テキストエディタにもよりますが、改行コードをラインフィード(LF)にして見て下さい。 |
回答者 羊相談員
[削除]
投稿日 2/15(木) 10:26:06
>print "<LI>対象:$obje, 符号:$code, 名称:$name, 滞留:$rete,<BR>\n"; この中にやばい日本語コードを含んでいるものがあるかと思って調べてみましたが、見つかりませんでした。 |
質問者 koba
[削除]
投稿日 2/15(木) 17:45:13
どこか抜けてるんでしょうか??? open(FILE, "cgi.csv"); @logs = <FILE>; close(FILE); @logs = ($data); $data_count = @logs; for ($idx = 0; $idx <= $list_count - 1; $idx++) { ($obje, $code, $name, $rete) = split (",",$data); print <<"EOM"; <TR> <TD height="10" width="34" align="center"><FONT SIZE="2">$obje</FONT></TD> <TD height="10" width="77" align="center"><FONT SIZE="2">$code</FONT></TD> <TD align="center" height="10" width="308"><FONT size="2">$name</FONT></TD> <TD align="center" height="10" width="63"><FONT SIZE="2">$rete</FONT></TD> </TR> EOM } |
回答者 さくら
[削除]
投稿日 2/16(金) 00:39:16
解答します。 まず、貴方の書いたコードでは、貴方の望むような動きはしないでしょう。 最初に気になっている事を一つ、 csvファイルの各行の行末、つまり改行の前にカンマがあるのですか? あれば、結構ですが、無ければ読み出したデータをchompする必要があるでしょう。 そうしないと、$rete には、改行が含まれている事になる。 貴方の書いたコードで分からない事、 >$data_count = @logs 配列の要素数を調べる為のものだと思うが、$data_countはどこで使っているの? >@logs = ($data); これはでは、@logs の内容は、$data の値だけになってしまう。 きっと貴方は$dataを追加したいのでしょう? それなら、こうするべきです。 配列の最初に追加する場合 unshift @logs, $data; 配列の最後に追加する場合 push @logs, $data; >$idx <= $list_count - 1 $list_count はなんの値? まあ、それはそれとして、どうしてもforループで書くならこうするべきでしょう open(FILE, "cgi.csv"); @logs = <FILE>; close(FILE); unshift @logs, $data; #配列の最初に追加した for ($idx = 0; $idx < @logs; $idx++) { $data = shift @logs; chomp $data; #改行が有るとしてchompしている ($obje, $code, $name, $rete) = split ",", $data; print <<"EOM"; <TR> <TD height="10" width="34" align="center"><FONT SIZE="2">$obje</FONT></TD> <TD height="10" width="77" align="center"><FONT SIZE="2">$code</FONT></TD> <TD align="center" height="10" width="308"><FONT size="2">$name</FONT></TD> <TD align="center" height="10" width="63"><FONT SIZE="2">$rete</FONT></TD> </TR> EOM } これで、一応OKなのですが、ファイルからデータを読む場合はこういうコードは書かないものだ。私ならこんな風に書く。 open CSV, "cgi.csv" or die; print "<TABLE>"; while(<CSV>){ chomp; print "<TR>"; foreach(split /,/){ print "<TD>$_</TD>"; } print "</TR>\n"; } print "</TABLE>\n"; close CSV; これだけで、csvファイルの内容は<TABLE>から</TABLE> の中に出力される。 もし、$dataを追加したいのなら、print "<TABLE>"; の次の行に出力すれば良い。 |
回答者 羊相談員
[削除]
投稿日 2/23(金) 09:03:37
>貴方の書いたコードでは、貴方の望むような動きはしないでしょう。 ただ単に表示するだけなので大丈夫なんじゃないでしょうか。 |
返信(回答)する
Web裏技 |