カレッヂ |
質問者 やまあらし
投稿日 5/11(土) 15:18:59
下記CGIを実行したときに data.datに1,2,3,4,5,6と言う データーがあるとした場合 @listの方は 123456は と出ます @sublistの方は 1は2は3は4は5は6は と出ます 私は両方とも 1は2は・・・と表示されると 思うのですがなぜ結果が違うのでしょうか print '@list'; としたら、きちんと 1,2,3,4,5,6 と出るのに 結果が違う・・・なぜ? 理解しておきたいのでどなたか教えていただければと思います。 よろしくお願いします。 以下 プログラムになります #!/usr/local/bin/perl print "Content-type: text/html\n\n"; if(!open A,"data.dat"){ print "データファイルを開けません。<hr size=1>"; exit; } @list=<A>; close(A); &hyouji; @sublist=(1,2,3,4,5,6); &hyoujini; sub hyouji{ foreach $value ( @list ){ print "$valueは "; } } sub hyoujini{ foreach $value ( @sublist ){ print "$valueは "; } } exit; |
回答者 しあわせのツボ
[削除]
投稿日 5/11(土) 17:53:45
data.datにはどのような形で記録していますか。 例示のスクリプトの場合、\n毎に1ループでforeachが回ります。 手元マシンとサーバマシンのOSによって改行コードが異なるので注意が必要です。 |
質問者 やまあらし
[削除]
投稿日 5/11(土) 23:06:13
いつもいつもありがとうございます。 どのような形??? えーとですね 一番最初はワードパットで 1,2,3,4,5,6 6,5,4,3,2,1 実際は半角英数です と言った感じで1件分1行のCSVを作ってアップしています(アスキーで) その後TXTファイルをdatに変更しています。 あとは、CGIで上書き、書き足しします。 datファイルを開くと1件分1行になっています。 サーバーOSはリニックスとアパッチとか言っていました NT系ではないとのことです。 私は98SEを愛用しております。 ???な事が多くちょっと分かりませんが どうしたら(どう理解したら)プログラミングに役立つでしょうか |
回答者 今夜はやすだ
[削除]
投稿日 5/11(土) 23:45:25
つぼさんのいったことに付け加えてファイルから読み込んだデータを対象しているhyouji関数内をかえると、 for(@list){ for(split',',$_){ print"$_は"; } } ですね。 |
質問者 やまあらし
[削除]
投稿日 5/12(日) 01:53:51
ありがとうございます。 2つの事から おぼろげに分かってきました 同じコンマ区切りの形式でも CGIでファイルを読み込んだものと CGIの中で作ったものとで 処理の仕方が違う と言うことなのでしょうか ファイルから読み込んだものは スプリットして やっと CGIの中で作ったものと同じになると言うことで よろしいのでしょうか 違っていたら ご指摘下さい。 |
回答者 しあわせのツボ
[削除]
投稿日 5/12(日) 03:18:57
@list = (1,2,3,4,5,6); はカンマ区切りデータではありません。 Perl内で @list = (1,2,3,4,5,6); とすると、 $list[0] は 1 $list[1] は 2 $list[2] は 3 (以下$list[5]まで続く) になります。 対して、ファイル内に 1,2,3,4,5,6 6,5,4,3,2,1 と書いたものをファイルハンドルから読み込むと $list[0] は 1,2,3,4,5,6 $list[0] は 6,5,4,3,2,1 (以下は存在しない) になります。 もし、ファイルハンドルから読み込んで前者と同じようにしたければ、 ファイル内に 1 2 3 4 5 6 のように記録しておくか、 読み込んだデータをsplitして改めて配列にする必要があります。 |
質問者 やまあらし
[削除]
投稿日 5/13(月) 02:37:42
皆様の意見を基に実験しました できました 並びに 理解できました データーを処理する上ですごく大事な理解点だと思いました。 最近ほんのちょっとですが 頭柔らかくなってきたような気がします ありがとうございます。 まもなく目標とするものができあがりそうです。 でもまだ 難問ありそうです・・・。 がんばります!! |
返信(回答)する
Web裏技 |