我有一个带分隔符的文本文件为|它有10列。我把这个文件放在一个数组中,在阅读之前,我想检查文件是否有效意味着非空,文件有固定的10列。如果列数< 10然后应显示错误信息
答案 0 :(得分:1)
您可以只计算每行中的管道字符数。十列意味着至少九个管道,所以你可以说
perl -ne '($n = tr/|// + 1) and die "Only $n fields on line $.\n"' myfile.txt
答案 1 :(得分:-3)
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;
编辑: 有很多方法,这只是一个快速的回答。它将确保至少10个,尽管你在技术上要求9或更少的&gt;登录。
编辑编辑: 这将确保至少10,它可能更多。我建议用全球正则表达式计算,但对我来说已经有一段时间了。或者,也许是另一种确保10的方法:
$line = <$fh>;
my @check=split(/\|/, $line);
if (scalar @check !=10){print "bad file delimitation!\n";}
编辑x3: if($ 10 =〜/ | /){print“超过10列!\ n”;}以确保不超过10,但尝试进行全局正则表达式计数或数组方法