2017-01-19 3 views
1

Я могу экспортировать сериализованное текстовое представление объекта из нашего проприетарного программного обеспечения для ЧПУ и его необходимо проанализировать для импорта объектов в мое приложение Rails.Разбор пользовательского сериализованного объекта в Rails

Пример сериализованная выход:

Header { 
    code "Centric 20170117 16gaHRS" 
    label "Centric 20170117 16gaHRS" 
    lccShortname "Centric 20170117 16gaHRS" 
    jobgroup "20170117 - Pike Sign" 
    waste 97.5516173272 
    unit INCH 
    Material { 
     code "HRS" 
     label "HRS" 
     labelDIN "HRS" 
     density 0.283647787542 
     thickness 0.125 
    } 
} 
Rawmaterials { 
    Rawmaterial { 
     id 52312 
     format 120 48.25 
     stock +999 
     used +1 
    } 
} 
Parts { 
    Part { 
     id 1 
     code "8581-Sign" 
     label "8581-Sign" 
     need +2 
     used +2 
     priority +1 
     turnAngleIncrement +180 
     ccAllowed +0 
     filler +0 
     area 141.761356753 
     positioningTime 10.369402427 
     cuttingTime 346.222969467 
     piercingTime 35.5976025504 
     positioningWay 1949.56 
     cuttingWay 9249.13 
     countPiercingNormal +75 
     countPiercingPuls +4 
    } 
} 
Plans { 
    Plan { 
     id 52313 
     label "Centric 20170117 16gaHRS 1" 
     filename "Centric 20170117 16gaHRS01" 
     border 0.5 0.5 0.5 0.5 
     cycleCount +1 
     waste 97.5516173272 
     positioningTime 11.9357066923 
     cuttingTime 345.629256802 
     piercingTime 35.5976025504 
     auxiliaryProcessTime 79.2405450926 
     positioningWay 1954.13 
     cuttingWay 9215.92 
     countPiercingNormal +75 
     countPiercingPuls +4 
     RawmaterialReference 52312 
     PartReferences { 
      PartReference { 
       id 1 
       layer 21 
       partId 1 
       insert -128.833464567 -97.2358267717 
      } 
     } 
    } 
    Plan { 
     id 52314 
     label "Centric 20170117 16gaHRS 2" 
     filename "Centric 20170117 16gaHRS02" 
     border 0.5 0.5 0.5 0.5 
     cycleCount +1 
     waste 97.5516173272 
     positioningTime 11.9357066923 
     cuttingTime 345.629256802 
     piercingTime 35.5976025504 
     auxiliaryProcessTime 79.2405450926 
     positioningWay 1954.13 
     cuttingWay 9215.92 
     countPiercingNormal +75 
     countPiercingPuls +4 
     RawmaterialReference 52312 
     PartReferences { 
      PartReference { 
       id 1 
       layer 21 
       partId 1 
       insert -128.833464567 -97.2358267717 
      } 
     } 
    } 
} 

Для начала, я хотел бы извлечь атрибут code из раздела Header, и атрибут filename для каждого Plan.

Я мог бы выполнять итерацию в файле, сохраняя при этом фигурные скобки и какой раздел мы сейчас обрабатываем, но кажется, что должен быть более простой способ. Я мог бы легко разобрать его, если бы это были JSON или XML-данные, но я не понимаю, как простейший способ разобрать этот нестандартный формат.

ответ

1

Нет простого способа.

Парсер json и xml делает то же самое, проходя через символ файла по символу и отслеживая все, только что кто-то написал этот код для вас.

я вижу 5 вариантов

  • вы делаете, как предложено, линии чтения по линии и частично разбор файла. Это называется парсером «островной грамматики»
  • вы используете ряд регулярных выражений, чтобы превратить файл в действительный файл JSON, а затем проанализируйте его, форматы выглядят достаточно похожими, чтобы было возможно.
  • формат и написать свой собственный полный парсер
  • вы получите имя формата файла у собственника и найдите драгоценный камень, который реализует парсер. Скорее всего, их не будет
  • вы получаете собственный поставщик для экспорта данных в другом формате. Скорее всего, они будут взимать астрономическую цену или просто сказать нет

Я не дал бы первых двух вариантов попробовать ...

+1

я в конечном итоге написание пользовательского анализатора для собственного формата. – Ryan

+0

Хороший выбор, вы выбрали самый забавный вариант! :) – akuhn