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