重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

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

こちらではいつもお世話になっています。Perlに関して、初心者ですが教えてください。
CSVファイルについて、データの存在する行数を取得したいと考えています。自分なりに考えたところでは、下記の方法で取得できるのではと思ったのですが・・・・・

open(FH,"data.csv");
@array = <FH>;
$count = $#array;
close(FH);

data.csvは、1行目から順にデータが入っています。
これで、$countに1を足せばCSVデータの行数になるのではないかと考えています。
しかし、実際に動かしてみると、$countには、data.csvにデータがあるのに「-1」(要素なし)が返ってきます。何か間違いがあるのでしょうか。
あるいは、別にCSVデータの行数を取得する方法が他にあれば、教えていただけないでしょうか。

よろしくお願いします。

A 回答 (1件)

>data.csvにデータがあるのに


というのは、「そのファイルがあるはずだ」なのか「@arrayに読み込んでいるのに」なのかで違うんではないでしょうか・・・
下を実行してみてください。
「オープンエラー」なら、無いか場所が違うか名前が違うか、"./data.csv"で、カレントフォルダも指定しなくてはいけないのか・・・
エラーにならずに-1なら・・・
結果を教えてください。

ちなみに、scalar(@array)で要素数はわかります、多分。


#!/usr/local/bin/perl

use strict;
use CGI::Carp qw(fatalsToBrowser);
use CGI;

#表示用設定
my $query = new CGI;
print $query->header(-charset=>'Shift_JIS');

if(open(FH,"data.csv")){
my @array = <FH>;
my $count = $#array;
close(FH);
print "count-1=$count<br>\n";
print "count=".scalar(@array)."<br>\n";
print "array0=$array[0]<br>\n";
}else{
print"オープンエラー";
exit;
}
    • good
    • 0
この回答へのお礼

大変ご丁寧に回答をいただきまして、ありがとうございました。
教えていただいたスクリプトを実行してみたところ、配列の要素数や1行目のデータなども表示されました。したがって、@arrayにcsvファイルのデータが読み込まれていることが確認できました。
また、教えていただいたスクリプトを参考にコードを書き直してみたところ、無事動作しました。
いろいろ試してできなかったことだったのですが、無事解決をしました。本当に助かりました。どうもありがとうございました。

お礼日時:2007/09/14 14:50

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