
こちらではいつもお世話になっています。Perlに関して、初心者ですが教えてください。
CSVファイルについて、データの存在する行数を取得したいと考えています。自分なりに考えたところでは、下記の方法で取得できるのではと思ったのですが・・・・・
open(FH,"data.csv");
@array = <FH>;
$count = $#array;
close(FH);
data.csvは、1行目から順にデータが入っています。
これで、$countに1を足せばCSVデータの行数になるのではないかと考えています。
しかし、実際に動かしてみると、$countには、data.csvにデータがあるのに「-1」(要素なし)が返ってきます。何か間違いがあるのでしょうか。
あるいは、別にCSVデータの行数を取得する方法が他にあれば、教えていただけないでしょうか。
よろしくお願いします。
No.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;
}
大変ご丁寧に回答をいただきまして、ありがとうございました。
教えていただいたスクリプトを実行してみたところ、配列の要素数や1行目のデータなども表示されました。したがって、@arrayにcsvファイルのデータが読み込まれていることが確認できました。
また、教えていただいたスクリプトを参考にコードを書き直してみたところ、無事動作しました。
いろいろ試してできなかったことだったのですが、無事解決をしました。本当に助かりました。どうもありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) データ解析ソフトRでのファイル入力read.csvがエラーになります 7 2022/03/27 22:11
- Visual Basic(VBA) マクロを教えてください。 7 2023/06/01 19:47
- その他(プログラミング・Web制作) python 気象データの取得 2 2023/06/20 23:54
- Visual Basic(VBA) VBA 毎日取得するデータを順番に反映していく方法 6 2023/08/26 16:22
- Excel(エクセル) エクセルでcsvファイルを開いてVBAを使いたい 7 2022/04/28 11:12
- Excel(エクセル) CSVファイルがカンマ区切りにならない。対処法を教えていただきたいです。 仕事でSMS一斉送信ができ 2 2022/07/01 21:24
- その他(プログラミング・Web制作) Fortranでの出力ファイル 2 2023/03/21 21:25
- Visual Basic(VBA) VBAで特定の場所にあるCSVファイル(複数)から特定場所を抜き出してExcelに転記したいです。 11 2023/05/23 16:29
- その他(プログラミング・Web制作) pythonのpandasのcsvの外部結合(outer_join)した際に列が想定とは異なる事象 1 2022/05/25 13:23
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Perlで特定行から特定行までを...
-
無料配布の郵便番号自動入力cgi...
-
VBScriptにて、テキストファイ...
-
fgets で値が取得できない
-
readdir()で得られるファイル・...
-
VBを使ってのCD-RWへのバックア...
-
openした後、closeしないでプロ...
-
perlのflock関数でロックをかけ...
-
Perlで特定文字列から特定文字...
-
Windowsで複数のファイルを同じ...
-
Edge スクレイピング
-
batファイルでrenameができませ...
-
where can I buy snowbord in t...
-
連番のファイルを何個も開きたい
-
エクセルVBA コードが同じでも...
-
ファイル名を複数個配列で確保...
-
空白文字 \\f と\\v の違いに...
-
vba dir の相対パス
-
makefileでファイルをコピー(...
-
配列の中に重複文字列があるか...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
perlでcsvファイルを読む(ダブ...
-
Perlで特定行から特定行までを...
-
MATLAB std::exceptionエラー
-
htmlファイルをテキストファイ...
-
Perl 順位の重複
-
パイソンでCSVファイル場所を指...
-
FTP接続時失敗時、接続先名をcs...
-
Perlを利用してテキストフ...
-
書き込み時に勝手にクリアさせ...
-
Perlの初心者です。2重ループ...
-
データベースを使わず、テキス...
-
ファイルオープンの挙動
-
perlでファイルの比較
-
Perlでの重複要素カウントにつ...
-
CSVファイルをperlプログラムで...
-
先頭の単語が一致した時のデー...
-
Argument "\\\\n" isn't numeri...
-
パターンマッチングにおいて変...
-
perl:パターンマッチを使ったif...
-
BBCode削除&改行をサニタイジ...
おすすめ情報