【问题标题】:How do I add data from a CSV file to an array in Perl?如何将 CSV 文件中的数据添加到 Perl 中的数组?
【发布时间】:2016-12-12 08:51:44
【问题描述】:

我已经在网上搜索和搜索,但我所做的一切似乎都不起作用。我知道这是一个非常简单的问题,但我真的被困住了......

我有一个文件目录,并将目录名称保存到 CSV 文件中。它只是由一列数据组成,例如:

100
101
102
103...

我使用以下代码创建文件(以防万一):

open (my $fileh, '>', '/Users/Shared/serials.csv') or die "Could not open file!";
print $fileh `ls -1 $path`;
close $fileh;
print "Saved Serials!";

现在我只想将文件中的数据读入一个数组,然后遍历每个值来完成一个任务。我不知道该怎么做...

目前我正在将代码中的数字手动输入到数组中,例如:

@ser_list = (100,101,102,103,...);

如上所述,我想使用ls 命令行查询自动写入文件名(数字),然后从那里读回脚本。 如果有一种方法可以做到这一点,而不必制作一个单独的值文件,那就太好了。

该数组在示例中称为@ser_list,从那里我从数组中读取下一个 $ser_num 并在循环中使用它。

foreach $ser_num (@ser_list) {....}

提前感谢大家的帮助和耐心等待!

【问题讨论】:

    标签: arrays perl csv file-writing


    【解决方案1】:

    不要在 Perl 程序中使用ls。你可以改用glob

    my @files = glob "$path/*";
    

    如果您需要使用路径和文件名,请查看Path::Tiny

    要将带有路径的行读入数组,只需使用

    open my $fh, '<', $filename or die $!;
    chomp( my @paths = <$fh> );
    

    有关详细信息,请参阅 openchompreadline

    【讨论】:

    • 默认的glob() 基于csh 并且不处理文件名中的空格。如果文件名有空格,请将glob()函数替换为use File::Glob qw( :bsd_glob );
    • @shawnhcorey:它不处理参数中的空格,带空格的文件名是可以的。如果您不希望它们成为分隔符,则需要在参数中使用反斜杠空格。
    • 你是对的。最麻烦的是目录名中的空格。向下遍历目录树时,必须对目录名中的空格进行转义。或者使用:bsd_glob,不用担心。
    • 他还可以使用:opendir(my $DH, "."); chomp(my @f = readdir($DH)); closedir $DH;(别忘了...)。
    • @3ED: chompreaddir?如果你的目录名以换行符结尾,你想保留它们。
    猜你喜欢
    • 2016-07-14
    • 2022-01-16
    • 2017-12-04
    • 1970-01-01
    • 1970-01-01
    • 2021-09-06
    • 2017-07-17
    • 2018-08-25
    • 2017-10-21
    相关资源
    最近更新 更多