forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   FAQ (http://forum.boolean.name/forumdisplay.php?f=15)
-   -   WriteString записывает не только указанное значение (http://forum.boolean.name/showthread.php?t=16894)

infuzo 11.06.2012 00:25

Ответ: WriteString записывает не только указанное значение
 
St_AnGer, да, видно без использования EoF не обойтись. Ну хорошо, я собрал достаточно информации, особенно помогла информация о переводе строки. Когда получится написать работающую функцию - обязательно сообщу.

infuzo 11.06.2012 02:22

Ответ: WriteString записывает не только указанное значение
 
Я во всём разобрался. Вот, если кому-то будет полезно - заимствуйте.
Чтение ini-файла:
Код:

Global  INIReadRes$
Function ReadINI(FileName$, KeyName$)
        ReadINIStream = ReadFile(FileName)
        Repeat
                FindKeyT$ = ReadLine(ReadINIStream)
                a% = 0
                Repeat
                        a = a+ 1
                Until Mid(FindKeyT$, a, 1) = "="
                FindKey$ = Left(FindKeyT$, a-1)
        Until FindKey$ = KeyName$
        INIReadRes = Mid(FindKeyT$, a+1, 10000)
        CloseFile(ReadINIStream)
End Function

Запись в ini-файл:

Код:

Dim  FileLine$(100000)
Function WriteINI(FileName$, KeyName$, CheckedValue$)
        ReadStream = ReadFile(FileName)
        a% = 0
        Repeat
                a = a + 1
                FileLine(a) = ReadLine(ReadStream)
        Until Eof(ReadStream)
        CloseFile(ReadStream)

        a = 0
        WriteStream = WriteFile(FileName)
        Repeat
                a = a + 1
                b% = 1
                While Mid(FileLine(a), b, 1) = "="
                b = b + 1
                Wend
                If Left(FileLine(a), b-1) = KeyName Then WriteLine(WriteStream, KeyName + "=" + CheckedValue)
               
                If Left(FileLine(a), b-1) <> KeyName Then WriteLine(WriteStream, FileLine(a))
               
        Until FileLine(a) = ""
        CloseFile(WriteStream)
       
End Function


radiobutton 11.06.2012 03:04

Ответ: WriteString записывает не только указанное значение
 
Цитата:

Сообщение от infuzo (Сообщение 230047)
Я во всём разобрался. Вот, если кому-то будет полезно - заимствуйте.
Чтение ini-файла:
Код:

Global  INIReadRes$
Function ReadINI(FileName$, KeyName$)
        ReadINIStream = ReadFile(FileName)
        Repeat
                FindKeyT$ = ReadLine(ReadINIStream)
                a% = 0
                Repeat
                        a = a+ 1
                Until Mid(FindKeyT$, a, 1) = "="
                FindKey$ = Left(FindKeyT$, a-1)
        Until FindKey$ = KeyName$
        INIReadRes = Mid(FindKeyT$, a+1, 10000)
        CloseFile(ReadINIStream)
End Function



Нету проверок на случай если в файле не будит нужного ключа и на случай если в строке не будит знака "=". Твоя прога зависнет, что не хорошо:)
ну и тут
INIReadRes = Mid(FindKeyT$, a+1, 10000)
10000 как то нечетко. Например c# бы выдал ошибку в таком случае при выполнении. Лучше уж сделать так:
INIReadRes = Mid(FindKeyT, a+1, len(FindKeyT)-a)
или
INIReadRes = Right(FindKeyT,len(FindKeyT)-a)

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

Черный крыс 11.06.2012 12:19

Ответ: WriteString записывает не только указанное значение
 
в блице функция WriteLine(str) сначала запишет длинну строки в виде целого числа, а затем собственно саму строку. ReadLine же прочтет сначала длину строки и после этого прочтет количество байт по длинне.

В БМаксе нет такого, там запись идет напрямую и чтение тоже ( тама надо указать длинну читаемой строки вручную )

Насчет INI-файлов зачем изобретать новый велик ? Еще со времен динозавров существуют функции в библиотеке kernel32.dll


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

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