0

xyz.csvコンテンツを含むcsvファイルがあります

name,age,place,phone
xyz,12,ohio,7372829
sed,23,hrh,9890908

csv ファイルを解析し、それが空のファイルかどうか、つまり提供されたヘッダーの値がないかどうかを確認する必要があります。

null ファイルxyz.csvにはヘッダーのみが含まれます (ヘッダーは減少または増加する可能性があります)。たとえば、減少します。

name,age,place,phone

増加:

name,age,place,mob,phno,ht

以下のコードで null ファイルをチェックし、それが null かどうかを出力するにはどうすればよいですか?

csvを解析するために以下のスクリプトを開発しました

open(my $data, '<', $file_c) or die "Could not open '$file_c' $!\n";

while (my $line = <$data>) 
{
    next if ($. == 1);
    chomp $line; 
    my @fields = split "," , $line; 

    print"$fields[0] fields[1]";
 }
4

4 に答える 4

2

もし私があなたなら、CPANモジュールを処理するCSVの1つ、たとえば、、をText::CSV調べTie::CSV_FileますDBD::CSV

ファイルが空であるかどうかを確認することは、ファイル内の解析された行の数を数える単純なケースです。を使用するDBIと、 SQLステートメントDBD::CSVを使用できます。SELECT COUNT(*) FROM table_name

次のリンクは、perlを使用したCSVファイルの解析に関する簡単なチュートリアルを提供します:http://perlmeme.org/tutorials/parsing_csv.html

于 2012-09-06T06:18:31.473 に答える
1

最初の行ではない任意の行に対して範囲演算子検索を使用できます。これは非常に効率的です。

while (<$data>) 
{
  unless (1..1) { print "not null\n"; exit 0; }
}
print "null\n";
exit 1;

または、行を 1 つずつ抜き取ることもできます。2 番目の行が定義されている場合、それは null ではありません。

<$data>;
print (defined <$data> ? "not null" : "null");
于 2012-09-06T07:40:00.860 に答える
0

これは機能するはずです。シェルプロンプトから、wc -l < FNAME行cntのみを返すかどうかを確認します。

print "empty" if chomp(my $dummy = `wc -l < FNAME`) == 1;

ただし、非効率的かもしれません。

于 2012-09-06T07:53:10.983 に答える
0

行数を確認する方法を見つけて、常にヘッダーが存在することが確実な場合は、最初の行が常にヘッダーです。

したがって、行 2 が存在しないか、行 2 の長さが 0 の場合は、空のファイルです。

于 2012-09-06T07:19:38.620 に答える