Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在perl中获得文件中存在的最大列数_Perl_File - Fatal编程技术网

如何在perl中获得文件中存在的最大列数

如何在perl中获得文件中存在的最大列数,perl,file,Perl,File,我有一个test.csv文件,其中包含类似这样的数据 "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 你能给我一些关于如何继续的建议吗。试试使用 通读每一行,解析此模块,并将字段数与变量进行比较 #!/bin

我有一个test.csv文件,其中包含类似这样的数据

"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
你能给我一些关于如何继续的建议吗。

试试使用

通读每一行,解析此模块,并将字段数与变量进行比较

#!/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;
}
#/bin/env perl
严格使用;
使用警告;
使用Text::CSV;
my$csv=文本::csv->新建;
我的$max=0;
打开我的$fh,“尝试使用

通读每一行,解析此模块,并将字段数与变量进行比较

#!/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;
}
#!/bin/env perl
严格使用;
使用警告;
使用Text::CSV;
my$csv=文本::csv->新建;
我的$max=0;

打开我的$fh,“人们在CSV文件上使用
split
而不是
Text::CSV
的一个主要原因是
Text::CSV
不是标准的Perl模块,因此它可能不可用

然后使用。这是一个标准模块,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"
#/usr/bin/env perl
#
严格使用;
使用警告;
使用特征qw(例如);
使用Text::ParseWords qw(quotewords);
我的$keep=0;
对于我的$行(){
chomp$行;
my@columns=quotewords(“\s*,\s*”,$keep,$line);
说“”;
}
__资料__
“a”、“美国”、“2011年11月24日”、“100.98”、“额外1”、“额外2”
“B”、“zim”、“2011年11月23日”、“123”、“额外22”
“C”、“can”、“2011年11月23日”、“123”
“D”,“罐,罐,罐”,“2011年11月23日”,“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
已经没有任何借口了。人们在CSV文件上使用
split
而不是
Text::CSV
的一个主要原因是
Text::CSV
不是标准的Perl模块,因此它可能不可用

然后使用。这是一个标准模块,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"
#/usr/bin/env perl
#
严格使用;
使用警告;
使用特征qw(例如);
使用Text::ParseWords qw(quotewords);
我的$keep=0;
对于我的$行(){
chomp$行;
my@columns=quotewords(“\s*,\s*”,$keep,$line);
说“”;
}
__资料__
“a”、“美国”、“2011年11月24日”、“100.98”、“额外1”、“额外2”
“B”、“zim”、“2011年11月23日”、“123”、“额外22”
“C”、“can”、“2011年11月23日”、“123”
“D”,“罐,罐,罐”,“2011年11月23日”,“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
已经没有任何借口了