如果我有一個文本文件,其中有一個標題記錄和由管道「|」分隔的字段,類似 - >Perl - 檢測標題記錄
Column1|Column2|Column3\n
A|B|C\n
E|F|G\n
1|2|X\n
有沒有一種方法可以確定頭文件是否以編程方式存在於文件中?值得注意的是頭文件並不總是一致的(因此,Column1在某些文件中可能被稱爲Column100)
如果我有一個文本文件,其中有一個標題記錄和由管道「|」分隔的字段,類似 - >Perl - 檢測標題記錄
Column1|Column2|Column3\n
A|B|C\n
E|F|G\n
1|2|X\n
有沒有一種方法可以確定頭文件是否以編程方式存在於文件中?值得注意的是頭文件並不總是一致的(因此,Column1在某些文件中可能被稱爲Column100)
唯一的方法我知道:標題行字段幾乎肯定是單詞(文本),數據行是在不同的數據類型(按列)。因此,如果在第一行中按類型列有不同類型的列,則表頭存在。
您需要某種數據類型的測試儀,並從該文本文件中獲取約5行以清楚說明。
您可以讀取文件的第一行,並將其拆分爲「|」,然後檢查以確保每列名稱與正則表達式/^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 {
# ...
}
不,您沒有提供足夠的信息。您描述的標題唯一的distince屬性是管道符號,並且不能存在於標題之外的任何內容中,而不能在非管道行之前。
好的,我給出的例子是一個糟糕的例子。標題更像是:Column1 | Field2 | ABC3 | XYZ4 – Chris 2011-02-16 21:29:56
@Chris:必須有一些方法來區分標頭和數據,否則不可能做到這一點。即使在你的簡單的第一種情況下,如果第一個數據行只有像「Column1」這樣的列,解決方案將不起作用。 – Tim 2011-02-16 21:35:54