2016-01-15 45 views
-3

我有一個帶有分隔符的文本文件作爲|它有10列。我已經把這個文件放在一個數組中,在讀之前我想把檢查文件是否有效,這意味着非空和固定10列的文件。如果然後應顯示驗證|從Perl中的數組讀取分隔的txt文件

+3

你可以[edit]你的帖子告訴我們你到目前爲止嘗試過什麼嗎? –

回答

-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號的錯誤消息編輯: 有很多方法,這僅僅是一個快速斜率的答案。它將確保至少10個如上所述,儘管您在技術上要求9或更少的符號。

編輯編輯: 這將確保至少10,它可能會更多。我建議用全局正則表達式來計算,但它對我來說已經有一段時間了。或者,也許是另一種方法,以確保準確的10:

$line = <$fh>; 
my @check=split(/\|/, $line); 
if (scalar @check !=10){print "bad file delimitation!\n";} 

編輯X3: 如果($ 10 =〜/ \ | /){打印 「等10多個欄目\ n!」;}確保不超過10 ,但嘗試做一個全局正則表達式來計數或數組方法

+0

謝謝。我正在讀取數組中的多個文件,然後將每個文件作爲一個數組讀取。例如,我有一個文本文件,如下面的數據abc.txt:10 | 111 | ab | 12a | acc。現在有些時候這個文件是空白的或者有一些垃圾字符。我想處理所有這些場景 – ruby

+0

這將處理垃圾字符並確保| 。隨意更改以下聲明,除非滿足您的需求。另外,你可以使用if(-z $ file){print「File size is zero/blank!」;} –

+0

也只是想知道在perl中傳遞多個數組(輸入文件數組)是否正確?再次,我不想遇到任何問題,因爲缺少錯誤處理 – ruby

1

您可以只計算每行中的管道字符數。十列意味着至少九個管道,所以你可以說

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