Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.04.30;
Скачать: CL | DM;

Вниз

Организация 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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.029 c
2-1144744876
barakuda
2006-04-11 12:41
2006.04.30
Заменить буквы на цвет


3-1141658956
Дельфятник
2006-03-06 18:29
2006.04.30
Не осилил вопросы по транзакциям на собеседовании


2-1144773545
vasya2006
2006-04-11 20:39
2006.04.30
пароли и Excel


6-1136912333
_white_
2006-01-10 19:58
2006.04.30
Как передать файл по модему?


15-1144470910
TUser
2006-04-08 08:35
2006.04.30
Не слабо спекулянты работают.