我有一個test.csv文件,其數據是這樣的。如何獲得在perl文件中存在的最大列數
"a","usa","24-Nov-2011","100.98","Extra1","Extra2"
"B","zim","23-Nov-2011","123","Extra22"
"C","can","23-Nov-2011","123"
我想獲取該文件(在這種情況下,我是6)的最大列數,然後將其存儲在一個變量中。
像
Variable=6
你能爲我提供有關如何繼續的一些建議。
我有一個test.csv文件,其數據是這樣的。如何獲得在perl文件中存在的最大列數
"a","usa","24-Nov-2011","100.98","Extra1","Extra2"
"B","zim","23-Nov-2011","123","Extra22"
"C","can","23-Nov-2011","123"
我想獲取該文件(在這種情況下,我是6)的最大列數,然後將其存儲在一個變量中。
像
Variable=6
你能爲我提供有關如何繼續的一些建議。
嘗試使用Text::CSV
通讀各行,通過該模塊解析和字段的數量比較,以你的變量。
#!/bin/env perl
use strict;
use warnings;
use Text::CSV;
my $csv = Text::CSV->new;
my $max = 0;
open my $fh, "<:encoding(utf8)", "test.csv" or die "test.csv: $!";
while (my $row = $csv->getline($fh)) {
my $count = scalar @$rows;
$max = $count > $max ? $count : $max;
}
所說明的一個主要的原因,人們對一個CSV文件使用split
而不是Text::CSV
是Text::CSV
不是一個標準的Perl模塊,所以它可能無法使用。然後用Text::ParseWords。這是一個標準模塊ANS應該是一應俱全:
#! /usr/bin/env perl
#
use strict;
use warnings;
use feature qw(say);
use Text::ParseWords qw(quotewords);
my $keep = 0;
for my $line (<DATA>) {
chomp $line;
my @columns = quotewords ("\s*,\s*", $keep, $line);
say "<" . join("> <", @columns) . ">";
}
__DATA__
"a","usa","24-Nov-2011","100.98","Extra1","Extra2"
"B","zim","23-Nov-2011","123","Extra22"
"C","can","23-Nov-2011","123"
"D","can, can, can","23-Nov-2011","123"
這將產生:
<a> <usa> <24-Nov-2011> <100.98> <Extra1> <Extra2>
<B> <zim> <23-Nov-2011> <123> <Extra22>
<C> <can> <23-Nov-2011> <123>
<D> <can, can, can> <23-Nov-2011> <123>
注意引號裏面的逗號沒有甩開解析。現在,沒有更多的藉口使用split
。