forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Полезные функции (http://forum.boolean.name/forumdisplay.php?f=17)
-   -   Чтение ini cfg и прочих конфигурационных файлов (http://forum.boolean.name/showthread.php?t=5521)

tormoz 09.01.2008 02:23

Чтение ini cfg и прочих конфигурационных файлов
 
Эта функция принимает строку и разделитель, возвращает часть строки справа от разделителя. (Instr не использую намеренно из-за глюков с кириллицей)
Код:

Function ParsR$(linet$,r$)
        len_=Len(linet$)
      For i=1 To len_
        n$=Mid(linet$,i,1)
        If n$=r$
          zfile$=Right(linet$,len_-i)
          Return zfile$
        EndIf
      Next
End Function

Пример чтения конфиг файла :

Код:

Function Load_cfg(patch$)
  wf=ReadFile(patch$)

If wf<>0

While (Eof(wf) = 0)
    linet$=ReadLine(wf)
 
    If Left(linet$,6)="up_key"
        up_akey=ParsR$(linet$,"=")
  EndIf 
    If Left(linet$,6)="down_k"
        down_akey=ParsR$(linet$,"=")
  EndIf
    If Left(linet$,6)="jump_k"
      jump_akey=ParsR$(linet$,"=")
  EndIf
    If Left(linet$,6)="shot_k"
      shot_akey=ParsR$(linet$,"=")
  EndIf
    If Left(linet$,6)="attack"
        attack_akey=ParsR$(linet$,"=")
  EndIf
    If Left(linet$,6)="sit_ke"
      sit_akey=ParsR$(linet$,"=")
  EndIf
  If Left(linet$,6)="map_ke"
      map_akey=ParsR$(linet$,"=")
  EndIf
Wend
CloseFile wf
EndIf
End Function

Содержимое конфига такое (для этого примера):

Цитата:

up_key=205
down_key=203
jump_key=82
shot_key=200
attack_key=28
sit_key=208
map_key=50

moka 09.01.2008 11:57

Ответ: Чтение ini cfg и прочих конфигурационных файлов
 
Немножко модифицировал функции, первая функция теперь производительнее.
Но добавил 2, для получения левой и правой части. Но юзаеться Instr поэтому могут возникнуть проблеммы с кирилицей.
Код:

Function ParsR$(linet$,r$)
        Return Right(Linet,Len(linet$)-Instr(linet,r))
End Function

Function ParsL$(linet$,r$)
        Return Left(Linet,Instr(linet,r)-1)
End Function


И немного изменил саму главную функцию, она теперь читабельнее и удобнее добовлять новые действия на переменные.

Код:

Function Load_cfg(patch$)
        wf=ReadFile(patch$)
       
        If wf<>0
                While (Eof(wf) = 0)
                        linet$=ReadLine(wf)
                        tLeft$=ParsL(linet,"=")
                        tRight$=ParsR(linet,"=")
                       
                        Select tLeft
                                Case "up_key"
                                        up_akey=tRight
                                Case "down_k"
                                        down_akey=tRight
                                Case "jump_k"
                                        jump_akey=tRight
                                Case "shot_k"
                                        shot_akey=tRight
                                Case "attack"
                                        attack_akey=tRight
                                Case "sit_ke"
                                        sit_akey=tRight
                                Case "map_ke"
                                        map_akey=tRight
                        End Select
                Wend
                CloseFile wf
        EndIf
End Function

:)

HolyDel 09.01.2008 12:11

Ответ: Чтение ini cfg и прочих конфигурационных файлов
 
MoKa, tormoz писал: "(Instr не использую намеренно из-за глюков с кириллицей)"

Tadeus 09.01.2008 12:24

Re: Чтение ini cfg и прочих конфигурационных файлов
 
А кто в конфигурационных файлах будет писать кириллицей О_О

HolyDel 09.01.2008 12:35

Ответ: Чтение ini cfg и прочих конфигурационных файлов
 
Tadeus O_O
player_name=Василий Пупкин

Tadeus 09.01.2008 12:45

Re: Чтение ini cfg и прочих конфигурационных файлов
 
Возможно, однако проще закодировать ИМХО

moka 09.01.2008 12:47

Ответ: Чтение ini cfg и прочих конфигурационных файлов
 
Я кирилицу не юзаю :)

dimanche13 09.01.2008 13:17

Re: Чтение ini cfg и прочих конфигурационных файлов
 
Type Key
field name$
field code
end type
Читать сразу и название, и код кнопки. так проще сделать, по-моему...

tormoz 09.01.2008 20:46

Ответ: Чтение ini cfg и прочих конфигурационных файлов
 
dimanche13

у новичков обычно очень туго с типами
Поэтому на такие простые вещи лучше их не озадачивать.

зы. Напиши теперь запись файла. (мне просто некогда)

dimanche13 09.01.2008 21:45

Цитата:

Сообщение от tormoz (Сообщение 73551)
Напиши теперь запись файла. (мне просто некогда)

собсно, я тоже человек занятой ;)
но принцип накидаю
ф-ция сохранить_кнопку_в_файл(имя_кнопки->строка,код_кнопки->число,имя_файла->строка)
файл = открыть_файл(имя_файла)
если (удачно_открыли(файл))
перейти_в_конец_файла()
добавить_строку(имя_кнопки)
добавить_символ("=")
добавить_число(код_кнопки)
закрыть(файл)
вернуть все_ок
иначе
вернуть ахтунг
конец ф-ции

вот кстати со списком было бы проще и чтение и сохранение
Тип "Кнопка"
имя->строка
код->число
конец_типа

Список_"Кнопок"_инициализировать() коммент: не силен в списках на Б3Д

ф-ция загрузить_настройки_клавы(имя_файла->строка)
файл = открыть_файл_для_чтения(имя_файла)
если (удачно_открыли(файл))
пока(не_конилсо_файл())
создать новую_кнопку типа "Кнопка"
новая_кнопка\имя = все что до символа "="
новая_кнопка\код = все что после символа "="
добавить_в_Список("Кнопок",новую кнопку)
снова
закрыть(файл)
вернуть все_ок !коммент: как вариант вернуть кол-во прочит. кнопок
иначе
вернуть ахтунг
ппц ф-ции

ф-ция сохранить_настройки_клавы(имя_файла->строка)
файл = открыть_файл_для записи(имя_файла)
если (удачно_открыли(файл))
пока(не_конилсо_список("Кнопок"))
добавить_строку(текущая_кнопка\имя)
добавить_символ("=")
добавить_число(текущая_кнопка\код)
следующий_из_Списка("Кнопок",текущая_кнопка)
снова
закрыть(файл)
вернуть все_ок
иначе
вернуть ахтунг
ппц ф-ции

Блин много написал, надеюсь это кому-то пригодитсо ;)

FDsagizi 09.01.2008 23:37

Ответ: Чтение ini cfg и прочих конфигурационных файлов
 
dimanche13- не просче в коде написать?

dimanche13 10.01.2008 00:01

Ответ: Чтение ini cfg и прочих конфигурационных файлов
 
Цитата:

Сообщение от FDsagizi (Сообщение 73568)
dimanche13- не просче в коде написать?

Б3Д не знаю :@
переведи в код и запости сюда.
П.С. Давно известно, что лучше дать человеку удочку(принцип), чем каждый раз давать рыбу(копи/пасте)

Nex 20.01.2009 11:25

Ответ: Чтение ini cfg и прочих конфигурационных файлов
 
tormoz, можешь пожалуйста написать код как это дело использовать? А то что то не понятно... :(

jimon 20.01.2009 12:30

Ответ: Чтение ini cfg и прочих конфигурационных файлов
 
SkySream
в посте tormoz'a и так есть пример

Nex 20.01.2009 12:36

Ответ: Чтение ini cfg и прочих конфигурационных файлов
 
jimon, ты меня наверно не правильно понял. Просто я не могу понять, как эти функции использовать...


Часовой пояс GMT +4, время: 07:28.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot