Есть ли надежда разобрать CSV-файл с помощью Augeas?

Я пытаюсь создать линзу, которая будет анализировать файл с форматом

#header1 header2 header3

valA1 valA2      valA3
valB1    valB2   valB3

Я бы хотел, чтобы результат напоминал следующее дерево:

root
 +--[1]
 |   +----header1 -> valA1
 |   +----header2 -> valA2
 |   +----header3 -> valA3
 +--[2]
     +----header1 -> valB1
     +----header2 -> valB2
     +----header3 -> valB3

Проблема в том, что сначала мне нужно проанализировать строку заголовка, чтобы узнать имена полей и запомнить их, а затем использовать их несколько раз в качестве источника имен ключей во всех последующих строках. У кого-нибудь есть идеи, как начать писать такой объектив? Я проверил все линзы 181, которые идут в комплекте с Augeas, и не нашел ни одной линзы, которая, как я подозреваю, могла бы анализировать таблицы.


person Adam Ryczkowski    schedule 16.12.2014    source источник


Ответы (1)


Нет, в Augeas невозможно сохранить значения в заголовке и повторно использовать их в качестве меток для каждой строки.

Однако вы можете построить дерево, подобное этому:

{ "#comment" = "header1 header2 header3" }
{ "1"
  { "1" = "valA1" }
  { "2" = "valA2" }
  { "3" = "valA3" }
{ "2"
  { "1" = "valA1" }
  { "2" = "valB2" }
  { "3" = "valB3" } }
person raphink    schedule 14.01.2015
comment
Этой формы недостаточно для моих целей. Спасибо за ваш ответ! - person Adam Ryczkowski; 14.01.2015
comment
... но с небольшой постобработкой я мог бы получить то, что хочу (например, написать скрипт, который переводит это дерево в файл INI, а затем использовать augeas, чтобы преобразовать его в форму, которую я хочу). Можете ли вы дать мне несколько советов по некоторым существующим объективам, которые я могу адаптировать, чтобы получить формат, который вы поставили? - person Adam Ryczkowski; 14.01.2015
comment
С небольшой постобработкой вы также можете проанализировать первую строку, а затем сопоставить числа в первой строке с числами в других строках, за пределами кода объектива. - person raphink; 14.01.2015