Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.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
Perl:Join/Splits-未初始化变量_Perl - Fatal编程技术网

Perl:Join/Splits-未初始化变量

Perl:Join/Splits-未初始化变量,perl,Perl,我试图在从CSV文件读取的行的开始和结束处添加引号,然后将其拆分并添加到数组中 a,b,c<br /> x,y,z<br /> 我的数据看起来像我的数据看起来像: a,b,c<br /> x,y,z<br /> 我试图找出如何解决这个问题,我认为(对某人而言)这将是我所缺少的一些简单的东西 额外信息 我知道如果我想在开始和结束时添加引号,我会使用: push (@lines, "\""); unshift (@lines, "\"");

我试图在从CSV文件读取的行的开始和结束处添加引号,然后将其拆分并添加到数组中

a,b,c<br /> x,y,z<br />
我的数据看起来像我的数据看起来像:

a,b,c<br /> x,y,z<br />
我试图找出如何解决这个问题,我认为(对某人而言)这将是我所缺少的一些简单的东西

额外信息

我知道如果我想在开始和结束时添加引号,我会使用:

push (@lines, "\"");
    unshift (@lines, "\"");

    my $newStr = join $/, @lines;
    print $newStr;
完整代码为:

use warnings;
use Text::CSV;
use Data::Dumper;

use constant debug => 0;
use Text::CSV;

print "Running CSV editor......\n";

#my $csv = Text::CSV->new({ sep_char => ',' });

my $file = $ARGV[0] or die "Need to get CSV file on the command line\n";

my $fileextension = substr($file, -4);

#If the file is a CSV file then read in the file.
if ($fileextension =~ m/csv/i) { 

  print "Reading and formating: $ARGV[0] \n";

  open(my $data, '<', $file) or die "Could not open '$file' $!\n";

  my @fields;

  while (my $line = <$data>) {   
    #Clears the white space at the end of the line.
    chomp $line;

    #Splits the line up and removes the <br />.
    my @lines = join("\"", split (qr{<br\s?/>})), $line;    

    #Removes the control character.   
    shift (@lines); 
    print "\n";
    #print $_, $/ for @lines;
  }         
  print "\n Finished reading and formating: $ARGV[0] \n";
}
else { 
  print "Error: File is not a CSV file\n"
}
使用警告;
使用Text::CSV;
使用数据::转储程序;
使用常量debug=>0;
使用Text::CSV;
打印“正在运行CSV编辑器…”\n;
#我的$csv=Text::csv->new({sep_char=>','});
my$file=$ARGV[0]或die“需要在命令行上获取CSV文件\n”;
my$fileextension=substr($file,-4);
#如果文件是CSV文件,则读取该文件。
如果($fileextension=~m/csv/i){
打印“读取和格式化:$ARGV[0]\n”;

打开(我的$data),首先:请在所有程序中始终


其中一个闭合支架位于错误的位置

my @lines = join("\"", split (qr{<br\s?/>})), $line;
                                           ^-- The second arg of split goes here.
改用这个:

my @lines = join('"', split(qr{<br\s?/>}, $line));  
例如:

my $line = 'a<br/>b<br/>c'; 
my @lines = join "\"", split qr{<br\s?/>}, $line;
print Dumper \@lines;


还要注意的是,获取列表并返回单个字符串,而不是数组。

首先:请在所有程序中始终


其中一个闭合支架位于错误的位置

my @lines = join("\"", split (qr{<br\s?/>})), $line;
                                           ^-- The second arg of split goes here.
改用这个:

my @lines = join('"', split(qr{<br\s?/>}, $line));  
例如:

my $line = 'a<br/>b<br/>c'; 
my @lines = join "\"", split qr{<br\s?/>}, $line;
print Dumper \@lines;


还要注意的是,它获取一个列表并返回一个字符串,而不是一个数组。

我想知道您的数据是否真的看起来像这样

<br/>a,b,c<br/>x,y,z

a,b,c
x,y,z
在这种情况下,你需要的是

my @lines = split m|<br\s*/>|, $line;
print qq("$_"\n) for grep /\S/, @lines;
my@lines=splitm | |,$line;
为grep/\S/,@行打印qq($\n);

但是你的信息不一致,我只是在这里猜测,我想知道你的数据是否真的像这样

<br/>a,b,c<br/>x,y,z

a,b,c
x,y,z
在这种情况下,你需要的是

my @lines = split m|<br\s*/>|, $line;
print qq("$_"\n) for grep /\S/, @lines;
my@lines=splitm | |,$line;
为grep/\S/,@行打印qq($\n);

但是您的信息不一致,我只是在这里猜测

是的,也就是说。
split
作为默认参数
$\uuu
。您需要指定正确的行,您希望通过
split
函数拆分它。我将在您的情况下执行此操作:
split/delimiter/,$splitThisLine
请查看一些实际的输入数据ata和您想要的相应输出?您没有显示任何包含

的内容。我认为您混淆了Perl和C,因为您似乎认为可以通过数组访问字符串的字符。现在发生的是,您正在创建一个数组
@lines
,其中一个元素等于返回值of
join
。您可以通过调用
shift
立即删除此元素,并使用注释删除控制字符,因此数组最终为空。我添加了一个数据示例,当然是狗屎(@lines)删除数组中的第一个元素,在我的例子中,它是一个控制字符。是的,也就是说。
split
将作为默认参数
$\uu
。您需要指定正确的行,您希望通过
split
函数拆分该行。我将在您的例子中执行此操作:
split/delimiter/,$splitThisLine
请查看一些相关信息l输入数据和所需的相应输出?您没有显示任何包含

的内容。我认为您将Perl与C混淆了,因为您似乎认为可以通过数组访问字符串的字符。所发生的是,您正在创建一个数组
@lines
,其中单个元素等于return值
join
。您可以通过调用
shift
立即删除此元素,并使用注释删除控制字符,因此数组最终为空。我添加了一个数据示例,当然是狗屎(@lines)删除数组中的第一个元素,在我的例子中它是一个控制字符。我的数据看起来像:a,b,c
x,y,z
+1我也在想同样的事情。整个
join'““
部分非常奇怪……但是我没有时间了,所以我没有在我的回答中跟进。我的数据看起来像:a,b,c
x,y,z
+1我也在想同样的事情。整个
连接”
部分非常奇怪……但是我没有时间了,所以我没有在我的回答中跟进。
my @lines = split m|<br\s*/>|, $line;
print qq("$_"\n) for grep /\S/, @lines;