Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.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
Arrays 在perl中读取数组时验证|分隔的txt文件_Arrays_Excel_Perl - Fatal编程技术网

Arrays 在perl中读取数组时验证|分隔的txt文件

Arrays 在perl中读取数组时验证|分隔的txt文件,arrays,excel,perl,Arrays,Excel,Perl,我有一个文本文件,分隔符为|,它有大约10列。我已经把这个文件放在一个数组中,在读取之前,我想检查文件是否有效,即是否为非空,文件是否有固定的10列。如果列数

我有一个文本文件,分隔符为|,它有大约10列。我已经把这个文件放在一个数组中,在读取之前,我想检查文件是否有效,即是否为非空,文件是否有固定的10列。如果列数<10,则应显示一条错误消息

my($file,$fh);
my ($file, $fh);
$file = 'path/to/file.txt';
open $fh, '<', $file or die $!;
$line = <$fh>;
unless($fh=~/^.*?\|.*?\|.*?\|.*?\|.*?\|.*?\|.*?\|.*?\|.*?\|.*/){print "You have more than 10 columns!\n";}
if($10=~/\|/){print "more than 10 columns!\n";}
close $fh;
$file='path/to/file.txt'; 开$fh,'签名

编辑: 这将确保至少10个,可能更多。我建议使用global regex进行计数,但对我来说已经有一段时间了。或者,也许还有另一种方法可以确保精确10:

$line = <$fh>;
my @check=split(/\|/, $line);
if (scalar @check !=10){print "bad file delimitation!\n";}
$line=;
我的@check=split(/\ \124;/,$line);
如果(scalar@check!=10){打印“错误的文件定界!\n”;}
编辑x3:
如果($10=~/\\\\;/){print“more 10 columns!\n”}以确保不超过10,但尝试使用全局正则表达式进行计数或使用数组方法

可以只计算每行中的管道字符数。十根柱子意味着至少有九根管子,所以你可以这么说

perl -ne '($n = tr/|// + 1) and die "Only $n fields on line $.\n"' myfile.txt

你能在你的帖子里告诉我们你到目前为止都做了些什么吗?谢谢。我在一个数组中读取多个文件,然后将每个文件进一步作为一个数组。例如,我有一个类似abc.txt的文本文件,其中包含以下数据:10 | 111 | ab | 12a | acc。现在,这个文件有时是空白的,或者有一些垃圾字符。我想处理所有这些场景。这将处理垃圾角色并确保|。请随意更改以下声明,除非符合您的需要。或者,您可以使用if(-z$file){print“file size is zero/blank!”;}还想知道在perl函数中传递多个数组(输入文件数组)是否正确?同样,我不想因为缺少错误处理而遇到任何问题。如果我读得正确,您希望将多个文件句柄传递到一个函数中,并在那里处理每个文件句柄(以检查它们?)。听起来是个好主意。我现在正在打电话,但您可以将数组作为checkfiles(\@file\u array)传递到函数中;然后在函数中:sub checkfiles{my@array=[@{$\[0]}];foreach(@array){my$fh;open$fh',其中数组的每个元素都是路径。然后对于sub,有open$fh,'