2011-02-16 59 views
0

如果我有一個文本文件,其中有一個標題記錄和由管道「|」分隔的字段,類似 - >Perl - 檢測標題記錄

Column1|Column2|Column3\n 
A|B|C\n 
E|F|G\n 
1|2|X\n 

有沒有一種方法可以確定頭文件是否以編程方式存在於文件中?值得注意的是頭文件並不總是一致的(因此,Column1在某些文件中可能被稱爲Column100)

回答

1

唯一的方法我知道:標題行字段幾乎肯定是單詞(文本),數據行是在不同的數據類型(按列)。因此,如果在第一行中按類型列有不同類型的列,則表頭存在。

您需要某種數據類型的測試儀,並從該文本文件中獲取約5行以清楚說明。

1

您可以讀取文件的第一行,並將其拆分爲「|」,然後檢查以確保每列名稱與正則表達式/^Column\d+$/相匹配。

my @columns = split /\|/, $first_line; 
if (@columns == grep { m/^Column\d+$/ } @columns) { 
    # each column in the first line looks like a header 
} else { 
    # ... 
} 
+0

好的,我給出的例子是一個糟糕的例子。標題更像是:Column1 | Field2 | ABC3 | XYZ4 – Chris 2011-02-16 21:29:56

+0

@Chris:必須有一些方法來區分標頭和數據,否則不可能做到這一點。即使在你的簡單的第一種情況下,如果第一個數據行只有像「Column1」這樣的列,解決方案將不起作用。 – Tim 2011-02-16 21:35:54

0

不,您沒有提供足夠的信息。您描述的標題唯一的distince屬性是管道符號,並且不能存在於標題之外的任何內容中,而不能在非管道行之前。