从CSV文件中读取并转换为数组,遍历数组,获取每行的第二个元素。

4

我是一个Perl编程的新手,也是整个编程世界的新手。

我正在尝试编写一个程序,它可以打开一个CSV文件,将其读入一个数组,并使用split()解析它。

CSV文件的每个字段都包含四个内容:

  $full_name, $user_name, $password, $con_password

我的问题是我需要访问每行的第二个元素(user_name)。然后我需要将所有用户名放入一个数组中,以便我可以处理它们。
我已经完成了拆分,但我不知道如何确保获取每行的第二个元素。
这是我的代码:
 #!/usr/bin/perl
 use CGI qw(:standard);
 use strict;
 use warnings;

 print "Content-type: text/html\n\n";

 my $file = '/home/2014/amosqu/public_html/cgi-bin/Members.csv';
 open(my $csv, '>>', $file) or die "Could not open '$file' $!";

 #i get these values from a form in an html file
 my $full_name = param('full_name');
 my $user_name = param('user_name');
 my $password = param('password');
 my $con_password = param('con_password');

 #array to store user names
 my @users = ();

 while(my $lines = <$csv>) {
     chomp $lines;
     my @fields = split(/,/, $lines);
 }

 #access second element and put into @users ???

$fields[1] 将会给你第二个元素。(从零开始) - John C
放入@users? - sofdelg
push @users, $fields[1]; - John C
1个回答

5

您需要编写类似于以下内容的代码...

my @list;
open (my $csv, '<', $file) || die "cant open";
foreach (<$csv>) {
   chomp;
   my @fields = split(/\,/);
   push @list, $fields[1];
}

你的代码中打开文件的方式是追加而不是读取。


我的CSV文件中的每一行都会发生这种情况吗? - sofdelg
看看我的例子?你需要使用“<”而不是“>>”。 - John C
我的程序需要将一些值附加到 Members.csv 文件中。如果我想要读取并附加,我应该使用 '+>>' 吗? - sofdelg
1
你可以使用“读取并追加”模式打开文件,但它会将文件指针移动到结尾处,因此您需要执行“定位到开头”的操作。但在你目前的学习阶段,我建议你只使用一个文件句柄。先打开/读取/关闭文件,然后再打开/追加/关闭文件。尝试使用两个文件句柄会导致错误。将你的思维过程进行模块化。 - PeterT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接