Извлечение содержимого из текстовых файлов с общими правилами - PullRequest
0 голосов
/ 11 марта 2012

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

В основном приложение выполняет следующие действия:

  1. Загрузить данные в текстовое поле
  2. Введите структуру вывода в виде простого набора правил в другое текстовое поле
  3. Получите результаты в третьем текстовом поле

Примеры структур данных (у меня есть мегабайты этих данных):

Label1: value1, measurement
Label2; value2; something else
Nr, value3 (comment)
...

Мне нужен какой-то другой подход, который я мог бы использовать вместо регулярных выражений. Это может быть очень просто, потому что все, что мне нужно, это одно значение из каждой строки.

Из приведенного выше примера я должен получить следующую структуру:

"value1, value2, value3"

Есть ли более простая альтернатива регулярному выражению? Кто-то уже реализовал что-то подобное?

Я также могу представить, что подхожу к проблеме с неправильной точки зрения, например, заставляя простого пользователя писать правила извлечения данных. В этом случае вопрос трансформируется в нечто более общее, например: «Как создать приложение, которое позволяет очень простому пользователю извлекать данные из отдельных текстов?»

Edit: Для них реализовано следующее простейшее сопоставление:

Содержимое файла:

"Strain at break Ax2";"Unknown"
"Strain at break Ax1";"Unknown"
"Strain at break";"Unknown"
"Yield point strain";"Unknown"
"Uniform elongation";25.4087;"%"
"Tensile strength";261.323;"MPa"
"End test phase Yield point";1;"%"
"Maximum tensile force";5.22647;"kN"

Шаблон:

"Tensile strength";(?<value>[^;\n]*);
"Maximum tensile force";(?<value>[^;\n]*);

Все еще слишком сложно. Проблема в том, что если я начну заменять некрасивую часть другой строкой, получим, например:

"Tensile strength", [First value after]

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

Ответы [ 2 ]

1 голос
/ 11 марта 2012

Взгляните на библиотеку FileHelpers .Это позволяет генерацию файловых макетов во время выполнения , и я думаю, что в вашем примере это поможет DelimitedClassBuilder.

В вашем случае, я бы, наверное,используйте FileHelpers для анализа определений записей в DelimitedClassBuilder, а затем используйте результат для анализа ваших записей.

0 голосов
/ 06 мая 2012

Я решил проблему, определив правила как регулярные выражения. После того, как правила были определены, я определил набор правил-оболочек, который будет легче читать пользователям.

Ex. извлечь значение из строки

Maximum amount of Sheet Drawing Force= 35.659695[kN]

Я определил регулярное выражение

{0}=\s*(?<value>[^[\n\r]*)

затем позвольте пользователю определить имя поля. Затем заполнитель {0} был заменен на имя поля и примененное регулярное выражение.

...