2012-03-11 2 views
0

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

основном приложение делает следующее дело:

  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] 

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

+0

Вы посмотрели LEX? – GETah

+0

_ «Я бы использовал регулярные выражения, но, к сожалению, люди, которые используют приложение, никогда не слышали об этом». Являются ли пользователи разработчиками или вы? –

+0

Пользователи - лаборанты, которые работают с гидравлическими прессами, абсолютно не тренируются в программировании. – Germstorm

ответ

0

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

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

Maximum amount of Sheet Drawing Force= 35.659695[kN] 

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

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

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

1

Посмотрите на библиотеку FileHelpers. Он позволяет runtime generation of file layouts, и я думаю, что тот, который поможет в вашем примере, это DelimitedClassBuilder.

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

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