|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
парсинг/загрузка из структурированного txt файла
Привет всем.
Очень долго мучаюсь с проблемой парсинга (структурированного). Пример: Дан файл txt с содержимым: Код:
1. Наиболее полное толкование понятия техника это … а) совокупность средств, создаваемых для осуществления процесса производства и обслуживания потребностей общества b) комплекс материальных вещей, средств и орудий труда с) совокупность орудий труда и навыков d) реализация человеческого разума 2. Машиной называется … а) устройство, предназначенное для осуществления механических движений и силовых воздействий, необходимых для выполнения рабочих процессов b) устройство, представляющее собой совокупность механизмов одного функционального назначения c) устройство, выполняющее механическое движение d) устройство, состоящее из нескольких механизмов .... Как лучше парсить данные: Номер вопроса, вопрос, ответ а, ответ б, ответ с, ответ д; нужно использовать записи? или же массивы? могли бы показать небольшой пример? 1) Если учесть что может быть перенос строк. 2) Или же вариантов ответа не 4-ыре, а 5-ть (a,b,c,d,e). (Просто нужно будет после чтения отправлять данные на сервер методом post ) Заранее благодарен за помощь. |
#2
|
||||
|
||||
Если каждое значение в отдельной строке, то загоняем ваш файл в StringList
Затем проверяем последовательно строки на наличие цифры + точка в начале, это будет вопрос. Далее по той-же схеме проверяем уже букву + скобку в начале пока не достигнем следующего номера или конца файла. Если-же перенос строк, то уже несколько сложнее. Можно считать, что строка является продолжением предыдущей если начинается не с цифры + точка и не с буквы + скобка. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#3
|
|||
|
|||
Цитата:
Я канешно так и думал что должно быть, спасибо за ответ. Но немоглибы подкинуть пример? или ткнуть носом, возможно ктото уже задавался подобным вопросом. просто я не нашел. |
#4
|
|||
|
|||
Цитата:
|
#5
|
|||
|
|||
Цитата:
Я канешно не собираюсь спорить, но вот честно не нашел то что нужно мне Хотя за наводки спасибо Последний раз редактировалось aktivizion, 22.03.2011 в 16:32. |
#6
|
|||
|
|||
|
#7
|
|||
|
|||
Цитата:
Да да, это я уже нашел , приду с работы буду разбираться |
#8
|
|||
|
|||
Тема всё ещё актуальна)...
|
#9
|
|||
|
|||
хм,парсингом вообще не занимался какбы,но есть такая идея,просто проверяешь функцией pos,если строка начинается с цифры,то это вопрос,а ответы ниже это ответы к этому вопросу,вопросы можно каким нить циклом - типа repeat until,или while, до тех пор пока в строке не будет цифра.
извиняюсь если мой вариант не слишком хороший,ибо парсингом текста не занимался) Последний раз редактировалось Snake22, 22.03.2011 в 23:23. |
#10
|
|||
|
|||
Цитата:
Идею подал, спасиб большое, удалось покачто мало-мальски получить номер и вопрос, остольное буду додумывать твоей идеей Просто моя беда была ещё вот в чем: У меня был оригинал в ворде, из него я перегнал в текстовик, и сохранил, но сохранил я в юникоде так как выдало предупреждение о том что есть какието символы, а вдруг они в ответе нужны, ну и получилось что я в 7-едьмой дельфи работал, а там стандартно tstringlist неразбирает в какой кодировке. попробовал на 11 (rad studio xe) заработало и то что я сказал что заработало, незначит то что вопрос решен) а то что часть от этой массы Последний раз редактировалось aktivizion, 22.03.2011 в 23:38. |
#11
|
|||
|
|||
Вариант - отказаться от текстового файла и перейти либо на бинарный файл, либо на xml
|
#12
|
|||
|
|||
Цитата:
да я бы с радостью бы на бинарный перешел, у меня есть опыт работы там, но, перевод тоже осуществляется парсингом, такчто мне кажется никак не отвертеться |
#13
|
|||
|
|||
Покачто долибся такого:
Код:
var i:integer; a,b,c,d:integer; a1,b1,c1,d1:string; que,z:string; s,buf,buf1:string; begin readln(f1,s); label6.Caption:=s; a:=ansipos('a)',s); b:=ansipos('b)',s); c:=ansipos('c)',s); d:=ansipos('d)',s); if (a = 0) and (s[2] <> ')') and (IsNumber(s[1]) = true) then begin que:=s; label1.Caption:=s; end; if (a <> 0) and (IsNumber(s[1]) = false) then begin //a1:=Copy(s,a+1,b-a); a1:=s; label2.Caption:=s; end; if (b <> 0) and (IsNumber(s[1]) = false) then begin b1:=s; label3.Caption:=s; end; if (c <> 0) and (IsNumber(s[1]) = false) then begin c1:=s; label4.Caption:=s; end; if (d <> 0) and (IsNumber(s[1]) = false) then begin d1:=s; label5.Caption:=s; end; if (a <> 0) and (b <> 0) and (c <> 0) and (d <> 0) and (IsNumber(s[1]) = true) then begin que := Copy(s,1,a-1); a1 := Copy(s,a+2,b-a); b1 := Copy(s,b+2,c-b); c1 := Copy(s,c+2,d-c); d1 := Copy(s,d+2,Length(s)); label1.Caption:=que; label2.Caption:=a1; label3.Caption:=b1; label4.Caption:=c1; label5.Caption:=d1; end; end; может кому пригодится. Осталось чуть подкорректировать, и по циклу погнать Код:
function tform1.IsNumber(s: string): Boolean; var i, v: integer; begin Val(s, v, i); IsNumber := (i=0); end; Последний раз редактировалось aktivizion, 25.03.2011 в 23:39. |