【问题标题】:Assigning a value to a variable containing a colon in Perl在 Perl 中为包含冒号的变量赋值
【发布时间】:2019-02-11 07:20:28
【问题描述】:

我编写了这个漂亮的 Perl 脚本来为广播电台的自动化系统生成一个 .cue 文件。它在我写它的第一天有效,一周后它不起作用。

这是它的工作原理的伪代码:

  1. 调用脚本并在启动时将以下变量作为参数分配: --要导入数组的CSV文件的名称 --MP3文件名

  2. 我声明了将分配逗号分隔值的变量的名称

  3. 打开文件

  4. 在 while 循环中,我遍历 CSV 的每一行并将每个逗号分隔值分配给一个变量。在进行下一次迭代之前,我在屏幕上打印 .cue 文件的输出

  5. 遍历 while 循环,直到处理完 CSV 的所有行

这就是问题所在,在我的 CSV 中,我最后一个字段的值包含一个冒号,Perl 认为它是一个运算符。这是一个示例行:

没有人喜欢你,蝎子,停电,13:38:00

当我运行脚本时,我收到以下错误: part1.csv 第 4 行的语法错误,靠近“13:”

这是我的问题:如何将包含 : 运算符的字符串分配给变量?似乎当 Perl 看到带有冒号的字符串时,它认为它需要对 : 做一些事情,而不是仅仅将它传递给变量。

我在 Windows 10 上运行活动状态 perl。这是我的

#!perl
use strict;
use warnings;


my $file = $ARGV[0] or die "Need to get CSV file on the command line\n";
my $mp3Filename = $ARGV[1] or die "Need the MP3 File Name\n";
my $title;
my $performer;
my $remAlbum;
my $myTrackIndex;
my $line;
my $data;
my @fields;
my $track = 1;
#FILE "show1.mp3" WAVE
print "FILE \"$ARGV[1]\" WAVE\n";
open($data, '<', $file) or die "Could not open '$file' $!\n";

while (my $line = <$data>) {
chomp $line;
my @fields = split "," , $line;
$title = $fields[0];
$performer = $fields[1];
$remAlbum = $fields[2];
$myTrackIndex = $fields[3];
print "TRACK 0$track AUDIO\n";
print "TITLE \"$title\"\n";
print "PERFORMER \"$performer\"\n";
print "REM ALBUM \"$remAlbum\"\n";
print "INDEX 01 $myTrackIndex\n";
$track++;
#TRACK 01 AUDIO
#TITLE "Heavy Metal Halloween - Toccata And Fugue"
#PERFORMER "Heavy Metal Halloween"
#REM ALBUM "Heavy Metal Halloween"
#INDEX 01 00:02:00



}

这是我得到的错误:

Semicolon seems to be missing at part1.csv line 1.
 at part1.csv line 1.
Semicolon seems to be missing at part1.csv line 2.
 at part1.csv line 2.
Semicolon seems to be missing at part1.csv line 3.
 at part1.csv line 3.
Semicolon seems to be missing at part1.csv line 4.
 at part1.csv line 4.
Semicolon seems to be missing at part1.csv line 5.
 at part1.csv line 5.
syntax error at part1.csv line 1, near "00:"
syntax error at part1.csv line 2, near "05:"
Illegal octal digit '9' at part1.csv line 3, at end of line
syntax error at part1.csv line 3, near "09:"
syntax error at part1.csv line 4, near "13:"
syntax error at part1.csv line 5, near "17:"
syntax error at part1.csv line 6, near "24:"
Execution of part1.csv aborted due to compilation errors.
 at part1.csv line 6.

感谢您的耐心等待。好几年没写代码了。

【问题讨论】:

  • 提示:您在解析 CSV 文件时有很多错误。您应该使用 Text::CSV。它不再使用,它​​会正确解析您的 CSV。用法:my $csv = Text::CSV-&gt;new({ auto_diag =&gt; 2, binary =&gt; 1 }); while (my $fields = $csv-&gt;getline($data)) { ... }

标签: perl csv


【解决方案1】:

错误消息表明 Perl 的调用方式存在问题。它试图将part1.csv 作为 Perl 程序运行(而不是运行您的实际 Perl 程序)。

perl -d part1.csv EJHour1-1.mp3

应该是

perl script.pl part1.csv EJHour1-1.mp3

或者只是

script.pl part1.csv EJHour1-1.mp3

【讨论】:

    猜你喜欢
    • 2014-02-11
    • 2017-08-23
    • 2012-04-06
    • 1970-01-01
    • 2015-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-19
    相关资源
    最近更新 更多