- ベストアンサー
エクセルで編集したCSVファイルを読み込むときに
よろしくお願い致します。 エクセルで編集したCSVファイルを読み込み、HTMLとして表示するCGIがあります。 エクセルでCSVファイルを編集すると最後の項目の後にカンマ(,)が付かないのですが、 使用しているCGIでは、カンマがないと行が改行されたとみなされません。 行の最後にカンマがなくても行を改行させるには、どのようなコードを追加すればよいのでしょうか? CGIのCSVファイルの読み込みする部分のコードは以下のようになっています。 # ログファイル読み込み my $LOG_FILE = 'log.csv'; my $io = IO::File->new($LOG_FILE, 'r') or die $!; flock($io, 1); while(my $line = $io->getline) { push @ids, (split(/,/, $line))[0]; push @new_checks, (split(/,/, $line))[1]; push @dates, (split(/,/, $line))[2]; push @contents, (split(/,/, $line))[3]; push @contents2, (split(/,/, $line))[4]; push @contents3, (split(/,/, $line))[5]; push @contents4, (split(/,/, $line))[6]; push @contents5, (split(/,/, $line))[7]; push @contents6, (split(/,/, $line))[8]; } 分かりにくい説明で申し訳ありません。 補足説明も致しますので、どうぞよろしくお願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
逆の発想ですが、行の末尾にカンマを付けてはどうでしょうか。 ... while(my $line = $io->getline) { $line .= ',' if substr($line, -1) ne ','; push @ids, (split(/,/, $line))[0]; ...
その他の回答 (2)
- kuroizell
- ベストアンサー率55% (95/170)
項目名が違う(項目1<->項目6)ので、別項目のように思えてしまうのですが、 項目1と項目6が「同じ項目のデータ一つ目、二つ目」という関係であれば、 foreach my $line(@lines){ my @colomns = split /\,/,$line; } これでカンマで区切られた各値が@Colmnsに格納されます。 $colomns[0]で項目1、$colomns[1]で項目2が取り出せます。 今回の場合の項目6は、一行目(項目1~5)の処理が終わった後に、繰り返し処理で$colomns[0]に上書されます。 上書される前にprintなどの望む出力を入れましょう。
お礼
お礼が遅くなり誠に申し訳ありませんでした。 先にお答え頂いた方の方法で問題なく表示できましたので、 まだお教え頂いた方法で試してはいないのですが、 こちらも今後の参考とさせて頂きます。 分かりやすいご説明をして頂き、ありがとうございました。
- kuroizell
- ベストアンサー率55% (95/170)
えー・・・っとよく分からないのですが、html上で改行入れるなら print $hoge<br>; でしょうか。読み込む部分も my $io = IO::File->new('$LOG_FILE', 'r') or die $!; my @lines = $io->getlines; $io->close; foreach my $line(@lines){ my @col = split /\,/,$line; #以上でpushってしてる処理の部分おしまい。以下、ただの表示。 print "ids = $col[0]\n"; print "new_checks = $col[1]\n"; print "dates = $col[2]\n"; ......... } のように思われます。
補足
早速ご回答頂きありがとうございます。 分かりづらい内容で申し訳ありません。 お伺いしたかったのはhtml上で改行をいれたいという内容ではなく、 CSVファイルの読み込みに関してなのです。 現在使用しているCGIは、CSVファイルの最後の項目の後にカンマがないと、 1行目と2行目の区別ができないようになっているのですが、 下記のBのように、それぞれの行の最後の項目にカンマがなくとも、 1行目と2行目を区別できるようにしたいと考えております。 CSVファイルの内容 -- A.※CGIで読み込みできる(項目6からは2行目と認識されます) ↓ 項目1,項目2,項目3,項目4,項目5, 項目6,項目7,項目8,項目9,項目10, B.※CGIで読み込みできない(項目5と6が同じ項目だとみなされる) ↓ 項目1,項目2,項目3,項目4,項目5 項目6,項目7,項目8,項目9,項目10 もし実現出来る方法がありましたら、ご教授頂けると幸いです。
お礼
お礼が遅くなり誠に申し訳ありませんでした。 お教え頂いた通りにコードを加えてみたところ、 1行目と2行目を区別して表示することができました。 本当に助かりました。ありがとうございました。