Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.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
如何知道csv中有多少个元素。PERL_Perl - Fatal编程技术网

如何知道csv中有多少个元素。PERL

如何知道csv中有多少个元素。PERL,perl,Perl,我正在编写代码,读取csv文件并从中生成新的txt文件。问题是我不知道它的行中有多少个元素。例如,它可以是 1,2,3,4,6 6,7,8,9,10 或 我使用的是Text:csvxs,但由于它将行作为变量获取,因此我似乎无法获取其长度。 有人能帮我解决这个基本问题吗 open(OUTFILE,'>file.txt'); my $csv = Text::CSV_XS->new ({ binary => 1, eol => $/ }); # #fields is a v

我正在编写代码,读取csv文件并从中生成新的txt文件。问题是我不知道它的行中有多少个元素。例如,它可以是

1,2,3,4,6
6,7,8,9,10

我使用的是Text:csvxs,但由于它将行作为变量获取,因此我似乎无法获取其长度。 有人能帮我解决这个基本问题吗

open(OUTFILE,'>file.txt');

my $csv = Text::CSV_XS->new ({ binary => 1, eol => $/ });
# #fields is a variable so can't seem to do $fields_size = @fields for its length
my $fields = $csv->getline ($fh);
while (my $row = $csv->getline ($fh)){
    for(my $c=0; $c <=1 ; $c++)
        {print OUTFILE "$fields->[$c]=$row->[$c];";}
    print OUTFILE "\n";     
}
close $fh;
open(OUTFILE,'>file.txt');
my$csv=Text::csv_XS->new({binary=>1,eol=>$/});
##fields是一个变量,因此似乎无法对其长度执行$fields_size=@fields
我的$fields=$csv->getline($fh);
while(my$row=$csv->getline($fh)){
对于(my$c=0;$c您可以执行以下操作:

my $fields = $csv->getline ($fh); 
my $size = scalar @$fields;
你可以做:

my $fields = $csv->getline ($fh); 
my $size = scalar @$fields;
你可以做:

my $fields = $csv->getline ($fh); 
my $size = scalar @$fields;
你可以做:

my $fields = $csv->getline ($fh); 
my $size = scalar @$fields;

虽然您的问题本质上是“如何获取数组中的元素数”,但看起来您真正想要做的是打印CSV中每个字段的列标题和值

为此,请使用
getline\u hr
而不是
getline
,它将CSV的每一行存储在哈希引用中。这样,您就不必跟踪数组索引。以下内容按从左到右的顺序打印每个字段和关联的列名:

# Set column names using first row in file
$csv->column_names($csv->getline($fh));

while (my $hr = $csv->getline_hr($fh)) {
    print "$_=$hr->{$_};" for $csv->column_names;
    print "\n";
}

请注意,列名必须是唯一的。

虽然您的问题本质上是“如何获取数组中的元素数”,但看起来您真正想做的是打印CSV中每个字段的列标题和值

为此,请使用
getline\u hr
而不是
getline
,它将CSV的每一行存储在哈希引用中。这样,您就不必跟踪数组索引。以下内容按从左到右的顺序打印每个字段和关联的列名:

# Set column names using first row in file
$csv->column_names($csv->getline($fh));

while (my $hr = $csv->getline_hr($fh)) {
    print "$_=$hr->{$_};" for $csv->column_names;
    print "\n";
}

请注意,列名必须是唯一的。

虽然您的问题本质上是“如何获取数组中的元素数”,但看起来您真正想做的是打印CSV中每个字段的列标题和值

为此,请使用
getline\u hr
而不是
getline
,它将CSV的每一行存储在哈希引用中。这样,您就不必跟踪数组索引。以下内容按从左到右的顺序打印每个字段和关联的列名:

# Set column names using first row in file
$csv->column_names($csv->getline($fh));

while (my $hr = $csv->getline_hr($fh)) {
    print "$_=$hr->{$_};" for $csv->column_names;
    print "\n";
}

请注意,列名必须是唯一的。

虽然您的问题本质上是“如何获取数组中的元素数”,但看起来您真正想做的是打印CSV中每个字段的列标题和值

为此,请使用
getline\u hr
而不是
getline
,它将CSV的每一行存储在哈希引用中。这样,您就不必跟踪数组索引。以下内容按从左到右的顺序打印每个字段和关联的列名:

# Set column names using first row in file
$csv->column_names($csv->getline($fh));

while (my $hr = $csv->getline_hr($fh)) {
    print "$_=$hr->{$_};" for $csv->column_names;
    print "\n";
}


请注意,列名必须是唯一的。

可能重复我尝试的$size=scalar@{$fields};但我得到:在串联(.)或字符串中使用未初始化值请阅读有关代码标记的SO文档,这样人们就不必不断编辑您的问题来解决它。可能重复我尝试的$size=scalar@{$fields};但我得到:在串联(.)或字符串中使用未初始化值请阅读有关代码标记的SO文档,这样人们就不必不断编辑您的问题来解决它。可能重复我尝试了我的$size=scalar@{$fields};但我得到:在串联()或者字符串请阅读有关代码标记的SO文档,这样人们就不必不断编辑您的问题来解决它。可能重复了我尝试的$size=scalar@{$fields};但是我得到了:在串联中使用未初始化的值(.)或者字符串请阅读有关代码标记的SO文档,这样人们就不必不断编辑您的问题来解决它。这给了我一个错误:“在串联(.)或字符串中使用未初始化的值”以及该错误意味着未设置
$fields
。分配它时您做错了什么。my$fields=$csv->getline($fh);如果我循环使用固定数量的长度。我认为$size没有被分配。这就是我正在做的事情,它正在出错。如果我循环使用for(my$c=0;$c),则会出现错误:“在串联(.)或字符串中使用未初始化的值”此外,该错误意味着未设置
$fields
。当您分配它时,您正在做一些错误的事情。my$fields=$csv->getline($fh);如果我使用固定长度循环。我认为$size没有被分配。这就是我正在做的事情,它正在出错。如果我使用for(my$c=0;$c)循环,则会出现错误:“在串联(.)或字符串中使用未初始化值”以及该错误意味着未设置
$fields
。分配它时您做错了。my$fields=$csv->getline($fh);如果我循环使用固定数量的长度。我认为$size没有被分配。这就是我正在做的事情,它正在出错。如果我循环使用for(my$c=0;$c),则会出现错误:“在串联(.)或字符串中使用未初始化的值“此外,该错误意味着未设置
$fields
。分配它时,您做了一些错误的事情。我的$fields=$csv->getline($fh);如果我使用固定的长度循环。我认为$size没有被分配。这就是我正在做的,它正在出错。如果我使用for循环(my$c=0;$c不完全。我只想在整行处理后使用新行。而不是在每个元素之后。我已经相应地解决了它。谢谢这解决了我的问题不完全。我只想在整行处理后使用新行。而不是在每个元素之后。我已经相应地解决了它。谢谢这解决了我的问题不完全。我想要新行只在整行被处理之后。不是在每个元素之后。我已经相应地修复了它。谢谢,这解决了我的问题。不完全是。我只希望新行在整行被处理之后。不是在每个元素之后。w