2011-02-16 58 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属性是管道符号,并且不能存在于标题之外的任何内容中,而不能在非管道行之前。