Форум: "Основная";
Текущий архив: 2006.04.30;
Скачать: [xml.tar.bz2];
ВнизОрганизация save/open Найти похожие ветки
← →
Inquaring (2006-03-21 13:42) [0]Представьте себе программу для тестирования. Каждый тест состоит из нескольких вопросов. Вопрос включает в себя:
1. Текст вопроса
2. Варианты ответов (Неизвестно заранее сколько их)
Тест должен быть записан в один файл.
Как огранизовать сохранение теста в один файл? Вся проблема в том, что неизвестно заранее количество вариантов ответов (да и их длинна тоже неизвестна). Была одна идея - обозначение следующего вопроса/ответа каким-нибудь набором символов. Например, так:
@@@
Вопрос 1
###
Ответ 1.1
###
Ответ 1.2
@@@
Вопрос 2
###
Ответ 2.1
и т.д
Такая схема работает, но при росте объёма текста начинает зверски тормозить при навигации (чего и следовало ожидать).
Вторая идея - загнать каждый вопрос в отдельный файл (типа .pak), однако во-первых, я не знаю как это сделать, а во-вторых не уверен в достаточном быстродействии на слабых компьютерах (p133).
Короче, помогите, плз, линком или советом!
← →
Сергей М. © (2006-03-21 13:43) [1]
> начинает зверски тормозить
При какой конкретно операции ?
← →
clickmaker © (2006-03-21 13:46) [2]ну как вариант - stringlist формата
вопрос=вариант ответа1;вариант ответа2...
разделитель - на усмотрение
потом Names, Values["вопрос"]
← →
Morgoth_ (2006-03-21 16:19) [3]А может лучше в Access загнать, или в dbf вообще.
Или принципиально нельзя?
← →
Inquaring (2006-03-21 21:57) [4]2Сергей М
Тормозить начинает при навигации. Вот понадобился мне, например, 124 вопрос, и вот при попытке его найти начинаются тормоза.
2clickmaker
Ну, это выглядит как ускоренный вариант моей идеи. Но это как-то неправильно выглядит. Не хочется мне вообще использовать ботву типа "вопрос=вариант ответа1;вариант ответа2". Некрасиво и неэффективно, имхо. Вообще при использовании разделителей, как ни крути будут тормоза при значительном объёме текста.
2Morgoth_
Честно говоря, я не знаю как запихать в Access или в dbf. Я ж не знаю заранее, сколько у меня будет полей и какова их длина.
← →
Германн © (2006-03-22 01:46) [5]
> Inquaring (21.03.06 13:42)
При такой постановке задачи, имхо, не стоит зацикливаться на
> Тест должен быть записан в один файл.
Или это "условие задачи"?
← →
Fedia © (2006-03-22 03:10) [6]>Inquaring (21.03.06 21:57) [4]
>Не хочется мне вообще использовать ботву типа "вопрос=вариант ответа1;>вариант ответа2". Некрасиво и неэффективно, имхо.
Это ж сколько вопросов и вариантов ответов должно быть, чтобы подобная задача тормозила, даже на P133. По моему, без организации БД вариант вопрос=вариант ответа1;>вариант ответа2, с использованием TStringList очень даже хорошо смотрится.
А если все-таки БД, то две таблицы. 1-я:
Id_question
question
2-я:
Id_question
Id_answer
answer
← →
Сергей М. © (2006-03-22 09:02) [7]
> Inquaring (21.03.06 21:57) [4]
> Тормозить начинает при навигации
Значит есть повод задуматься о правильности реализации сабжа именно в таком виде, т.е. в виде одного-единственного текстового файла с последовательным доступом к строкам.
Одним файлом при этом не обойдешься - нужен еще некий индексный файл.
Индексирование табличных данных реализовано в любой мало-мальски приличной СУБД, поэтому есть резон не изобретать велосипед, а использовать для решения задачи любую подходящую СУБД.
> не знаю заранее, сколько у меня будет полей и какова
> их длина
Это легко решаемо средствами СУБД.
← →
ЮЮ © (2006-03-22 12:25) [8]
> Вот понадобился мне, например, 124 вопрос, и вот при попытке
> его найти начинаются тормоза.
А что мешает создать массив/список строк - начала вопроса?
И не работать как с текстовым файлом, а весь файл загрузить в TStringList?
← →
StriderMan © (2006-03-22 12:30) [9]я такую фишку делал на INI файле
структура такая:
[MAIN]
QCount = //количество вопросов (можно и без этого обойтись, если сначала из ини файла получить все секции, есть там такой метод)
.... //всякая доп. инфа
[1] // первый вопрос
ACount = //кол-во варинтов ответа
.... //всякая доп. инфа
1 = //варианты ответов...
2 =
3=
...
и так далее
А еще была мысль сделать на TControl, которые умеют в поток сохранять и загружать себя и своих CHILD
← →
StriderMan © (2006-03-22 12:30) [10]я такую фишку делал на INI файле
структура такая:
[MAIN]
QCount = //количество вопросов (можно и без этого обойтись, если сначала из ини файла получить все секции, есть там такой метод)
.... //всякая доп. инфа
[1] // первый вопрос
ACount = //кол-во варинтов ответа
.... //всякая доп. инфа
1 = //варианты ответов...
2 =
3=
...
и так далее
А еще была мысль сделать на TControl, которые умеют в поток сохранять и загружать себя и своих CHILD
← →
Alarm © (2006-03-22 12:39) [11]Организация save/open [D7, WinXP]
Inquaring (21.03.06 13:42)
Что обсуждается, и в какой ветке? Была целая куча ссылок по этому вопросу. Ну а в целом, лично мне, не совсем понятны (очевидны) проблемы аффтара? Если он определится с ними, то можно кое-что посоветовать
← →
Morgoth_ (2006-03-22 17:34) [12]А если все-таки БД, то две таблицы. 1-я:
Id_question
question
2-я:
Id_question
Id_answer
answer
имхо, для этой задачи я бы лучше сделал одну таблицу:
ParentID
ID
Text
вопросу ParentID в ноль, ответам ParentID = ID вопроса
← →
Котик Б (2006-03-23 11:09) [13]Уважаемый Inquaring.
Боюсь при ТАКОМ подходе к постановки задачи у Вас ничего не получиться и Вы только потеряете время и силы на решение при ИЗНАЧАЛЬНО неправильных условиях...
Советую сначала почитать о теории тестов, из чего тесты состоят, и какие варианты ответов могут быть...
Но можете игнорировать моё сообщение если "Вы и так всё знаете".
Успехов :)
← →
Inquaring (2006-03-23 15:18) [14]Уважаемый Котик Б!
Задачу постанавливал, к превеликому сожалению, не я. И мне приходится с этой задачей считаться.
Необходимо: а) 1 тест - 1 файл. б)Неограниченное количество вариантов ответов. в) Возможность создания вопросов и ответов любого объёма (>255 символов). Работа программы без инсталляции. Вот такая вот херотень.
← →
Сергей М. © (2006-03-23 15:23) [15]
> Inquaring (23.03.06 15:18) [14]
> а) 1 тест - 1 файл
А "великая куча тестов - 1 файл" никак не подойдет ?
← →
KSergey © (2006-03-23 16:51) [16]> Inquaring (21.03.06 13:42)
> Такая схема работает, но при росте объёма текста начинает
> зверски тормозить при навигации (чего и следовало ожидать).
Не верю! (с)
Код "навигации" в студию.
С какого количества вопросов/ответов начинаются тормоза? Каков суммарный объем файла?
PS
На 99% уверен, что файл ложится в кэш припервом же прочтении. Не может навгация по нему занимать сколь-нибудь заметное время.
В крайнем случае - [8] по поводу сначала прочитать начала всех вопросов.
← →
Leonid Troyanovsky © (2006-03-23 18:00) [17]
> Inquaring (23.03.06 15:18) [14]
> Необходимо: а) 1 тест - 1 файл. б)Неограниченное количество
> вариантов ответов. в) Возможность создания вопросов и ответов
> любого объёма (>255 символов). Работа программы без инсталляции.
Есть такая вещь, как compound file, см StgCreateDocfile.
В одном таком файле можно создать нужное количество
storage object и stream object. Каждый storage object,
в свою очередь, может содержать требуемое количество
других storage object & stream and etc.
Если нужно держать каждый тест в отдельном файле,
то для каждого вопроса потребуется storage, который
будет содержать stream с вопросом и нужное количество
stream c ответами. См. также интерфейс IStorage.
--
Regards, LVT.
← →
azl © (2006-03-23 18:41) [18]Так нужна пргограмма для тестирования или программа для состаления тестов?
> Тест должен быть записан в один файл.
Это как понимать?
Я в своей жизни написал программ-тестов очень много. Зашивал все вопросы и варианты ответов, используя массивы, в саму программу без БД (можно и с БД, но это уже проблематичнее с установкой на клиенте, нужно базу инсталировать и прописывать).
И причем здесь
> Организация save/open
???
← →
Inquaring (2006-03-24 02:23) [19]Спасибо огромное всем ответившим. С Вашей помощью задача решена.
Тема закрыта.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.04.30;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.01 c