|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
04.09.2010, 21:01 | #1 |
Уважаемый
Форумчанин
Регистрация: 04.07.2010
Сообщений: 318
|
ВАРИАНТЫ ПАРСИНГА
...
N1 TOOL(9,1536.85,200,1) X1536.85Y200 X1536.85Y158.92Z=DC(90)M25 Y170.93 X1371Y191.425 Y199.578 Y207.73 X15Y200.225Z=DC(0) ... Это строки, из которых нужно вытянуть символы (это и числа и комбинации символов и слова, а именно: в первой строке нужно вытянуть N1, TOOL, 9 - причем разложить эти три слова в разные Label), т.е: Label1.Caption:= 'N1'; Label2.Caption:= 'TOOL'; Label3.Caption:= '9'; А вот со второй строкой по-другому: если первый символ Х, то число после него в Label4, а после Y - в Label5. А также если в конце стоит М - то число после него в Label6. -Таких строк ОЧЕНЬ много, N1 меняется на N2, N3, N4 может до 50 дойти. -Может быть MTOOL или TOOL. -Числа соответственно никогда не повторяются, могут иметь до 6 цифр плюс дробный разделитель(.) между ними. -В конце вместо М может Z стоять (Z=DC(0) - тогда 0 вытаскиваем, но может вместо него любое число до 360 стоять). Решение вижу в посимвольной проверке каждой строки, типа этого: ... x:= 1; I:= 0; C:= Form1.Memo1.Lines.Count; repeat m: string[x]; //??? - изменяем длину Form1.Label1.Caption:= Form1.Memo1.Lines[I]; //???? - здесь проверка //???? - а здесь обработка I:= I+1; until I = C; ... Это приблизительно, не надо ориентироваться по этому коду. Возможно есть более оптимальное решение вместо Repeat-Until в данном случае? И если проверяемый символ совпадает с заданными (X,Y,Z,M,N,E) то проводим дальнейшую обработку строки с этим символом. Т.е.: -Если Х - то числа после него записываем в Label1 пока следующий проверямый символ не окажется отличным от числа (совпадет с заданными) или конец строки. -Если Y - тоже самое, но число пишем в Label2. -Если М - число после него в Label3.После этого числа конец строки. -Если Z=DC(0) - число в скобках пишем в Label4. После него может быть еще значения. -Если N - число после него в Label5. -Если конец строки - то с полученными значениями проводим определенные действия, например выводим канвой на форму изображение по полученным координатам. -Если E - конец обработки программы полностью. Проверять именно слева, а не с конца, как говорят некоторые. В общем, нужен определенный алгоритм посимвольной проверки и сравнения строк + выполнение действий при совпадении и до перехода на следующую строку. Говорите что тема парсинга много раз уже поднималась? Поверьте это такой парсинг, инфы по которому я даже в Гугле не нашел. Только помощь нужна с описанием действий, а не просто нарезка чужих кодов. Желательно не просто функции, а с примером кода и описанием. Описание нужно для адекватной интеграции приведенных фрагментов. Все получат + , обещаю (если поможет совет).
даешь высокое напряжение
|
04.09.2010, 23:33 | #2 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
всё абсолютно реально.
Вот только идёя с помещением переменных в LabelXX мне кажется порочной. А что делать, если встретиться ДВЕ (или более) строчки с одинаковым типом строки?! (ну, например, X1536.85Y200 X1536.85Y158.92Z=DC(90)M25 что пойдёт в Label1 ?! это раз. второе. кроме того, мне абсолютно не ясен смысл разбора строки. Вы сами то понимаете? Вот, например: Цитата:
Что должно явится результатом парсинга? Заполненные лейблы Label1, Label2 .... LabelXXX ? постарайтесь разжевать, что Вам надо, тогда будет легче оказать Вам конкретную помощь. |
|
04.09.2010, 23:51 | #3 |
Уважаемый
Форумчанин
Регистрация: 04.07.2010
Сообщений: 318
|
1)В Labels после (Х,Y,M,Z,N,E) помещаем только число.
2)Заданные значения - это (Х,Y,M,Z,N,E) - они определяют куда помещать число следующее за этим значением (Label1 или Label2 и т.д.). 3)Числа помещаемые в Label тут же должны считываться другой процедурой, выполнять по этому значению функцию, и только потом числа меняются на другие. 4)Они одинаковы не полностью: видите там У-коэффициент другой? и Z в конце стоит. Это значит что координаты уже другие. Почему в Label? это только для пошагового тестирования программы. Потом работаем только с динамическими переменными. Например: меняем "Label1.Caption:=" на "Х:=". 5)Результат парсинга - вывод графической информации (канвой на форму) по сгенерированному машиной програмному коду(Х и У - это координаты).
даешь высокое напряжение
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Компоненты для парсинга страниц!!! | $T@LKER | Работа с сетью в Delphi | 14 | 20.02.2011 17:17 |
Как из мемо считать i-ую строку для парсинга. | TwiX | Общие вопросы C/C++ | 0 | 17.12.2009 21:49 |
Программа для парсинга описаний | chilinik | Общие вопросы Delphi | 2 | 07.10.2009 10:17 |
Мелкая ошибка парсинга | Legenda | PHP | 4 | 02.10.2008 17:52 |
пример парсинга | Stanislav | Общие вопросы Delphi | 4 | 14.01.2008 03:48 |