Perl - 检测标题记录
问题描述:
如果我有一个文本文件,其中有一个标题记录和由管道“|”分隔的字段,类似 - >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