Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
8-1133465053
JuSSS
2005-12-01 22:24
2006.04.30
Микрофон 20 dB boost


4-1139327559
abakh
2006-02-07 18:52
2006.04.30
OleContainer


2-1144999043
Рафик
2006-04-14 11:17
2006.04.30
Помогите c TWordApplication


2-1144925925
Случайный прохожий
2006-04-13 14:58
2006.04.30
Архивация в делфи


2-1144937250
ViktorZ
2006-04-13 18:07
2006.04.30
Почему не складывает как люди!!!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский