Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> По чтению текстовых файлов.... 
:(
    Опции темы
Sniper
Дата 3.3.2004, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 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
PM MAIL   Вверх
Pakshin A. S.
Дата 3.3.2004, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 21
Всего: 61



1) Завести INI
2) Поработать со строкой, т. е. копировать всё, после пробела, а далее if, изменение и т. п.
PM   Вверх
Maverick
Дата 3.3.2004, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1307
Регистрация: 22.9.2003
Где: Odessa, Ukraine

Репутация: 2
Всего: 10



INI, конечно, хорошо.... спору нет....
а неудобнее ли табличкой воспользоваться?


--------------------
smile
PM ICQ GTalk   Вверх
Sniper
Дата 3.3.2004, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 511
Регистрация: 8.5.2002

Репутация: нет
Всего: 2



Цитата(Pakshin @ 3.3.2004, 16:57)
1) Завести INI
2) Поработать со строкой, т. е. копировать всё, после пробела, а далее if, изменение и т. п.

Да я вот и спрашиваю как культурно реализовать пункт №2
строки же местами могут меняться!


--------------------
"Я испытываю отвращение к системе, разработаннной для "пользователя", если в слове "пользователь" закодировано уничижительное значение "тупой и примитивный".
Кен Томпсон, создатель Unix
PM MAIL   Вверх
Гость_Vasya
Дата 3.3.2004, 20:06 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


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.
Дата 3.3.2004, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 21
Всего: 61



Цитата(Sniper @ 3.3.2004, 21:04)
Цитата(Pakshin @ 3.3.2004, 16:57)
1) Завести INI
2) Поработать со строкой, т. е. копировать всё, после пробела, а далее if, изменение и т. п.

Да я вот и спрашиваю как культурно реализовать пункт №2
строки же местами могут меняться!

Открой любую статейку по работе состроками, глянь в FAQ'и. Попробуй разобраться сам, ну а если не получится, что заставляет задуматься, напишем...
PM   Вверх
Sniper
Дата 3.3.2004, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 511
Регистрация: 8.5.2002

Репутация: нет
Всего: 2



Я могу только так написать ;-(

wireframe
off
snd_freq
22khz
vid_bpp
16
vid_mode
1024x768

Более того оно написано и работает! wink.gif


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
PM MAIL   Вверх
z-END
  Дата 3.3.2004, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: 11
Всего: 102



Вот мой вариант решения:
1. обявим новый тип и ее переменную:
Код
Type TGameOption = Record
           cmd: String;
           value: String;
       end;
...
var
go: TGameOption;


2. Создадим функцию
Код
Function GetGO (Line: String): TgameOption;
var
symb: Char;
begin
symb := ' ';
// если данные хранятся в виде "command value"
//если  в виде "command=value" то замените symb :='=';
Result.cmd := trim (Copy (Line, 1, (Pos (symb, Line)));
Result.value := trim (Copy (Line, (Pos (symb, Line), length(Line)));
end;

3. в теле самой программы такой цикл:
Код
AssignFile (FConfig, 'user.cfg');
Reset (FConfig);
while not EOF (FConfig) do
begin
Readln (FConfig, s);
GO := GetGo(s);
// обрабатываем варианты комманд
if Go.cmd="..." then
                            begin
                               if Go.value="..."  then SomeVar := "...";
                                    {...}
                               if Go.value =".."  then SomeVar := "...";
                            end;

end;
CloseFile (FConfig);

Я не проверял, так что может вариант и нерабочийsmile.gif
ps а вообще-то наверное проще через форматирование строки т.е. RegEx smile.gif но в них я "0"



--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
remax
Дата 3.3.2004, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент
**


Профиль
Группа: Участник Клуба
Сообщений: 686
Регистрация: 7.4.2002
Где: Украина, Харьков

Репутация: 1
Всего: 5



Можно конечно и с текстовыми файлами играться smile.gif , но проще использовать готовый инструмент - Ини-файлы. В Делфи для этого уже все есть в модуле IniFiles. hehe.gif hehe.gif hehe.gif

Процедура для чтения из ини-файла

Код

uses IniFiles;

procedure LoadFromIni(iName:string);
var
 IniFile:TIniFile;
 s:string;
 i:integer;
 b:boolean;
begin
 IniFile:=TIniFile.Create(iName);
 s:=Trim(inifile.readstring('main','snd_freq',''));
 i:=inifile.readinteger('main','vid_bpp',0);
 b:=inifile.readbool('main','vid_bpp',false);
 IniFile.Free;
end;



Процедура для записи в ини-файла

Код

procedure SaveToIni(iName:string);
var
 IniFile:TIniFile;
 s:string;
 i:integer;
 b:boolean;
begin
 IniFile:=TIniFile.Create(iName);
 inifile.writestring('main','snd_freq',s);
 inifile.writeinteger('main','vid_bpp',i);
 inifile.writebool('main','vid_bpp',b);
 IniFile.UpdateFile;
 IniFile.Free;
end;


p.s. возможны мелкие ошибки - написано без проверки на делфи

Это сообщение отредактировал(а) remax - 3.3.2004, 22:00


--------------------
Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку
PM MAIL ICQ Skype   Вверх
Sniper
Дата 3.3.2004, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 511
Регистрация: 8.5.2002

Репутация: нет
Всего: 2



Я вообще не знал про такую функцию как "trim"! ;-(
Позор мне и порицание!


--------------------
"Я испытываю отвращение к системе, разработаннной для "пользователя", если в слове "пользователь" закодировано уничижительное значение "тупой и примитивный".
Кен Томпсон, создатель Unix
PM MAIL   Вверх
Sniper
Дата 3.3.2004, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 511
Регистрация: 8.5.2002

Репутация: нет
Всего: 2



remax Да Ini файлами я пользоваться умею....(все равно спасибо что написал! wink.gif) я хотел сделать так как это делает большенство! wink.gif


--------------------
"Я испытываю отвращение к системе, разработаннной для "пользователя", если в слове "пользователь" закодировано уничижительное значение "тупой и примитивный".
Кен Томпсон, создатель Unix
PM MAIL   Вверх
remax
Дата 3.3.2004, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент
**


Профиль
Группа: Участник Клуба
Сообщений: 686
Регистрация: 7.4.2002
Где: Украина, Харьков

Репутация: 1
Всего: 5



Цитата(Sniper @ 3.3.2004, 18:51)
я хотел сделать так как это делает большенство! wink.gif

В каком смысле "большинство"?

Это сообщение отредактировал(а) remax - 3.3.2004, 22:04


--------------------
Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку
PM MAIL ICQ Skype   Вверх
Sniper
Дата 3.3.2004, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 511
Регистрация: 8.5.2002

Репутация: нет
Всего: 2



Цитата(remax @ 3.3.2004, 19:02)
Цитата(Sniper @ 3.3.2004, 18:51)
я хотел сделать так как это делает большенство! wink.gif

В каком смысле "большинство"?

Впрямом! У всех игрушек конфиги сделаны по такому принципу
Quake III
CS
DOOM III
S.T.A.L.K.E.R.


--------------------
"Я испытываю отвращение к системе, разработаннной для "пользователя", если в слове "пользователь" закодировано уничижительное значение "тупой и примитивный".
Кен Томпсон, создатель Unix
PM MAIL   Вверх
Cheba
Дата 3.3.2004, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pointless one
***


Профиль
Группа: Vingrad developer
Сообщений: 1777
Регистрация: 27.11.2003
Где: /dev/null

Репутация: 1
Всего: 62



2 Sniper
Цитата
... S.T.A.L.K.E.R. ...
Откуда тебе знать какие там конфиги? Еще даже демки нет, а ты про конфиги говоришь... smile.gif
PM MAIL ICQ   Вверх
Medved
Дата 3.3.2004, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: 14
Всего: 154



Модератор: Давайте вернемся к теме обсуждения.


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1167 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.