2011-02-16 3 views
0

Если у меня есть текстовый файл, который имеет запись заголовка и поле, разделенное на канал "|" что-то вроде ->Perl - определить запись заголовка

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

Есть ли способ определить, существует ли запись заголовка в файле программно? Ловушка заключается в том, что заголовки не всегда согласованы (так что колонку 1 можно назвать Column100 в некоторых файлах)

ответ

1

Только так я знаю: поля строки заголовка почти наверняка являются словами (текстом), строки данных находятся в разных типах данных (по столбцам). Итак, если в первой строке есть столбцы по типам, но не одинаковые, заголовок присутствует.

Для этого требуется какой-то тестер данных и около 5 строк из этого текстового файла.

+0

Хорошо для начала! Благодаря! – Chris

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

+0

@Chris: Должен быть какой-то способ отличить заголовок от данных, иначе это невозможно сделать. Даже в вашем первом первом случае решение не будет работать, если в первой строке данных есть только столбцы «Column1». – Tim

+0

Можете ли вы объяснить, как имена столбцов отличаются от любых данных, которые могут отображаться в файле? Если нет четкой разницы между тем, что может быть именем столбца, и какими могут быть данные, которые вы не сможете определить, если есть строка, содержащая имена заголовков. –

0

Нет, вы не даете достаточно информации. Единственным свойством distince заголовка, который вы описываете, является символ трубы, и он не может существовать ни в чем другом, кроме заголовка, которому не может предшествовать нетрубная линия.

Смежные вопросы