![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Sniper |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 511 Регистрация: 8.5.2002 Репутация: нет Всего: 2 |
Значит нужно прочитать файл типа конфиг!
такие для игр делают типа: wireframe off snd_freq 22khz vid_bpp 16 vid_mode 1024x768 Т.е конфиг может изменяться on изменяться на off 22khz изменяться на 44khz 16 изменяться на 32 1024x768 может изменяться на 800x600 а то и на 640x480 Как это сделать РАЦИОНАЛЬНО!!!??? -------------------- "Я испытываю отвращение к системе, разработаннной для "пользователя", если в слове "пользователь" закодировано уничижительное значение "тупой и примитивный". Кен Томпсон, создатель Unix |
|||
|
||||
| Pakshin A. S. |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 5056 Регистрация: 16.2.2003 Репутация: 21 Всего: 61 |
1) Завести INI
2) Поработать со строкой, т. е. копировать всё, после пробела, а далее if, изменение и т. п. |
|||
|
||||
| Maverick |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1307 Регистрация: 22.9.2003 Где: Odessa, Ukraine Репутация: 2 Всего: 10 |
INI, конечно, хорошо.... спору нет....
а неудобнее ли табличкой воспользоваться? |
|||
|
||||
| Sniper |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 511 Регистрация: 8.5.2002 Репутация: нет Всего: 2 |
Да я вот и спрашиваю как культурно реализовать пункт №2 строки же местами могут меняться! -------------------- "Я испытываю отвращение к системе, разработаннной для "пользователя", если в слове "пользователь" закодировано уничижительное значение "тупой и примитивный". Кен Томпсон, создатель Unix |
|||
|
||||
| Гость_Vasya |
|
|||
|
Unregistered |
Ну, я сделал бы так:
type TConfig = record wireframe: Boolean; snd_freq: Integer; vid_bpp: Integer; vid_mode_x: Integer; vid_mode_y: Integer; end; Далее для записи его в файл: FileStr: TFileStream; Config: TConfig; with Config do begin Тут отутюживаем Config end; FileStr := TFileStream.Create('Conf.cgf', fmOpenWrite); FileStr.WriteBuffer(Config, SizeOf(Config)); FileStr.Free; И читаем: FileStr.ReadBuffer(Config, SizeOf(Config)); |
|||
|
||||
| Pakshin A. S. |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 5056 Регистрация: 16.2.2003 Репутация: 21 Всего: 61 |
Открой любую статейку по работе состроками, глянь в FAQ'и. Попробуй разобраться сам, ну а если не получится, что заставляет задуматься, напишем... |
||||
|
|||||
| Sniper |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 511 Регистрация: 8.5.2002 Репутация: нет Всего: 2 |
Я могу только так написать ;-(
wireframe off snd_freq 22khz vid_bpp 16 vid_mode 1024x768 Более того оно написано и работает! procedure LoadUserConfig; var Fconfig: TextFile; S: String; begin AssignFile(fconfig,'user.cfg'); Reset(fconfig); while not EOF(fconfig) do begin Readln(fconfig,s); if s = 'rs_fullscreen' then begin Readln(fconfig,s); if s = 'on' then rs_fullscreen := true; if s = 'off' then rs_fullscreen := false; end; if s = 'rs_wireframe' then begin Readln(fconfig,s); if s = 'on' then rs_wireframe := true else rs_wireframe := false; end; end; end; -------------------- "Я испытываю отвращение к системе, разработаннной для "пользователя", если в слове "пользователь" закодировано уничижительное значение "тупой и примитивный". Кен Томпсон, создатель Unix |
|||
|
||||
| z-END |
|
||||||
![]() прафесар™ ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3014 Регистрация: 13.3.2003 Где: Венья, Пиетари Репутация: 11 Всего: 102 |
Вот мой вариант решения:
1. обявим новый тип и ее переменную:
2. Создадим функцию
3. в теле самой программы такой цикл:
Я не проверял, так что может вариант и нерабочий ps а вообще-то наверное проще через форматирование строки т.е. RegEx -------------------- Каждый чилавек пасвоему праф...а памоему НЕТ! |
||||||
|
|||||||
| remax |
|
||||
|
Доцент ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 686 Регистрация: 7.4.2002 Где: Украина, Харьков Репутация: 1 Всего: 5 |
Можно конечно и с текстовыми файлами играться
Процедура для чтения из ини-файла
Процедура для записи в ини-файла
p.s. возможны мелкие ошибки - написано без проверки на делфи Это сообщение отредактировал(а) remax - 3.3.2004, 22:00 -------------------- Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку |
||||
|
|||||
| Sniper |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 511 Регистрация: 8.5.2002 Репутация: нет Всего: 2 |
Я вообще не знал про такую функцию как "trim"! ;-(
Позор мне и порицание! -------------------- "Я испытываю отвращение к системе, разработаннной для "пользователя", если в слове "пользователь" закодировано уничижительное значение "тупой и примитивный". Кен Томпсон, создатель Unix |
|||
|
||||
| Sniper |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 511 Регистрация: 8.5.2002 Репутация: нет Всего: 2 |
remax Да Ini файлами я пользоваться умею....(все равно спасибо что написал!
-------------------- "Я испытываю отвращение к системе, разработаннной для "пользователя", если в слове "пользователь" закодировано уничижительное значение "тупой и примитивный". Кен Томпсон, создатель Unix |
|||
|
||||
| remax |
|
|||
|
Доцент ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 686 Регистрация: 7.4.2002 Где: Украина, Харьков Репутация: 1 Всего: 5 |
В каком смысле "большинство"? Это сообщение отредактировал(а) remax - 3.3.2004, 22:04 -------------------- Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку |
|||
|
||||
| Sniper |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 511 Регистрация: 8.5.2002 Репутация: нет Всего: 2 |
Впрямом! У всех игрушек конфиги сделаны по такому принципу Quake III CS DOOM III S.T.A.L.K.E.R. -------------------- "Я испытываю отвращение к системе, разработаннной для "пользователя", если в слове "пользователь" закодировано уничижительное значение "тупой и примитивный". Кен Томпсон, создатель Unix |
||||
|
|||||
| Cheba |
|
|||
![]() pointless one ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 1777 Регистрация: 27.11.2003 Где: /dev/null Репутация: 1 Всего: 62 |
2 Sniper
|
|||
|
||||
| Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: 14 Всего: 154 |
Модератор: Давайте вернемся к теме обсуждения.
-------------------- |
|||
|
||||
| Unregistered |
|
|||
|
Unregistered |
Sniper
Используй типизированные файлы |
|||
|
||||
| SlaUr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 408 Регистрация: 18.9.2003 Репутация: 3 Всего: 5 |
Вот мое решение : скачать юнит для работы со строками Unit MyStr
(ошибки в процедурах не обработаны)
Пояснение: Function NFi(index:integer;StrInp:string):String; Возращает слово под номером index из строки StrInp ( независимо от количества пробелов между словами) Если надо считывать например путь к файлу(он может содержать пробелы ,то вместо NFi(2,'mypath') нужно считывать функцией NFe(2,'mypath') IMHO самый простой способ для работы с INI файлами ,без использования юнита IniFiles. p.s Возможны ошибки-компилировать не пробовал Это сообщение отредактировал(а) SlaUr - 4.3.2004, 12:25 |
|||
|
||||
| z-END |
|
|||
![]() прафесар™ ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3014 Регистрация: 13.3.2003 Где: Венья, Пиетари Репутация: 11 Всего: 102 |
Так нужно-то что, прочесть / изминить уже имеющийся конфиг?
если так, и ктомуже известны все возможные ключи=значения конфига, то можно через константы делать -------------------- Каждый чилавек пасвоему праф...а памоему НЕТ! |
|||
|
||||
| Pakshin A. S. |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 5056 Регистрация: 16.2.2003 Репутация: 21 Всего: 61 |
А повыпендриваться с нетипизированными файлами никто не хочет, вещь прикольная
|
|||
|
||||
| remax |
|
|||
|
Доцент ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 686 Регистрация: 7.4.2002 Где: Украина, Харьков Репутация: 1 Всего: 5 |
А что прикольного - ну чуть быстрее операции чтения/запись, так на таких маленьких файлах разницы не почувствовать- доли секунды все-таки. Проблем чуть поболее, но ничего особенного - работаем только не с набором строк, а с массивом байт (или char). Соответственно, при обработке используем не строковые функции, а операции с массивами. P.S. С помощью нетипизированного типа файлов вполне можно общаться и с обычными текстовыми, не забывая что #13#10 обозначают перевод строки. Это сообщение отредактировал(а) remax - 4.3.2004, 20:45 -------------------- Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку |
|||
|
||||
| Fantasist |
|
|||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: нет Всего: 41 |
Что-то выпендрежа не догоняю. Такие задачи решаются либо IniFile'aми, либо (что считается более продвинутым) работой с реестром (TRegistry). В некоторых случаях TStream (TFileStream, в частности) - запись и считывание в бинарном виде. Но хранить настройки в бинарном виде вряд ли хороший подход.
[offtopic] remax, от твоей собачки я просто балдею [/offtopic] -------------------- Волны гасят ветер... |
|||
|
||||
| remax |
|
|||
|
Доцент ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 686 Регистрация: 7.4.2002 Где: Украина, Харьков Репутация: 1 Всего: 5 |
В течении 5 минут было проведено экспресс исследование имеющихся в офисе игр: Используют INI файлы: LOTR The Return of the King Heroes of Might and Magic IV Rig&Roll Использует CFG файлы: Call of Duty Использует свой формат файла конфигурации: Broodwar Cossacs Использует INI и типа CFG файлы: The Sims Вероятно, все они в той или иной мере используют реестр. По крайней мере Windows игрушки типа Сапера именно в реестр пихают всю информацию. Так что это спорный вопрос, какой формат для хранения настроек использует "большинство". P.S. Результаты поиска по расширению на отдельно взятом компе (два виндовс, делфи, офис, игрушки): INI: 310 файлов CFG:140 файлов CNF:18 файлов -------------------- Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку |
|||
|
||||
| SlaUr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 408 Регистрация: 18.9.2003 Репутация: 3 Всего: 5 |
Если не хотите чтобы рядовые пользователи изменяли параметры настройки в ручную (а только из программы) - использовать cfg -файлы ,иначе - ini (Дополнильная возможность тонкой настройки программы) .
|
|||
|
||||
| remax |
|
|||
|
Доцент ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 686 Регистрация: 7.4.2002 Где: Украина, Харьков Репутация: 1 Всего: 5 |
Вручную можно править все!
INI и CFG одинаково легко, и намного легче чем бинарные файлы! -------------------- Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку |
|||
|
||||
| SlaUr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 408 Регистрация: 18.9.2003 Репутация: 3 Всего: 5 |
remaxcfg я имел ввиду типизированные файлы и как его править без hex-редактора ?
|
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |