Конференция "KOL" » чтение/запись в ini файл [Delphi, Windows]
 
  • Delphuk © (05.10.07 12:33) [0]
    Здравствуйте. Столкнулся с проблемой при чтении/записи многострочного текста в ini файл. Т.к. текст многострочный (берётся из

    Memo), то использование метода ValueString не подходит. Решил воспользоваться методом ValueData, делал примерно следующим

    образом:

    (запись)
    ......
    Var
    ini: PIniFile;
    str: String;
    .......
    begin
    ini := OpenIniFile('C:\my.ini');
    ini.Mode := ifmWrite;
    ini.Section := 'testing';
    str := Memo1.Text;
    ini.ValueData('Text', @str, SizeOf(str));
    ini.Free;
    .......
    end;



    (чтение)
    Var
    ini: PIniFile;
    str2: String;
    .......
    begin
    ini := OpenIniFile('C:\my.ini');
    ini.Mode := ifmRead;
    ini.Section := 'test';
    ini.ValueData('Text', @str2, SizeOf(str2));
    ini.Free;
    Memo.Text := str2;
    .......
    end;



    Если записывать и считывать текст за одну сессию (втечении первого запуска программы), то данный код работает. А если же

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

    приложение вылетает с ошибкой. Я так понимаю, что неправильно использую указатели и тд... Подскажите пожалуйста как нужно

    правильно выполнить запись и чтение многострочного текста, именно в ини файле.
  • Delphuk © (05.10.07 12:35) [1]
    P.S.
    Поправочка, при чтении указывают ту же секцию ini.Section := 'testing'
  • Robt (05.10.07 14:12) [2]

    > использование метода ValueString не подходит

    почему не подходит ?
    сохраняеш одну строку где вместо интера (#13#10) другой символ и наоборот
    функции соответствущие есть
  • Дмитрий К © (05.10.07 14:14) [3]
    SizeOf заменить на Length.
    Выделять память при чтении (SetLength) столько, сколько было записано, т.е. нужно запоминать длину строки.
  • Robt (05.10.07 14:19) [4]
    и вобще зачем PIniFile?
    сохраняй как есть через мемо в файл с расширением ini
  • Delphuk © (05.10.07 17:35) [5]
    Robt писал:
    почему не подходит ?
    сохраняеш одну строку где вместо интера (#13#10) другой символ и наоборот функции соответствущие есть.


    Это какие же функции? Пример можно?

    Robt писал:
    и вобще зачем PIniFile?
    сохраняй как есть через мемо в файл с расширением ini


    Потому что так нужно :) У меня есть набор однотипных данных, к которым нужен быстрый доступ. Например:
    [same key1]
    value(boolean)=1
    value2(integer)=666
    value3= Произвольный текст из нескольких строк

    [same key2]
    value(boolean)=0
    value2(integer)=999
    value3= Произвольный текст из нескольких строк
    ...........
    И так далее.

    Дмитрий К, оки, посмотрю что получится. Но всё равно вопрос остаётся открытым.
  • Robt © (08.10.07 16:30) [6]

    > Это какие же функции? Пример можно?

    strreplace например :)
  • Vladimir Kladov © (08.10.07 20:27) [7]
    Гораздо правильнее каждую строку сохранять как отдельную строку. И в любом случае, учтите, что при использовании старых платформ (9х) ини файл не должен превышать 32 (или 64) К.
  • Delphuk © (08.10.07 22:45) [8]
    Robt писал:
    почему не подходит ?
    сохраняеш одну строку где вместо интера (#13#10) другой символ и наоборот
    функции соответствущие есть
    strreplace например :)


    Спасибо, именно так и сделал :) Вот как бывает, когда мало юзаешь строки а работаешь только с математикой :)
    Vladimir Kladov, а какие ограничения на длину одной строки при использовании ValueString?
  • Robt © (09.10.07 12:39) [9]
    размер буфера в ValueString = 4095
    и используются системные функции такчто может и ещо меньше
    если многа надо луче свой формат стелать
  • mdw © (09.10.07 13:54) [10]
    Я недавно реализовал IniFile для winCE, работает аналогично стандартному, но основан на StrList, т.е. не ограничен в размерах. Попробуй, может подойдет?
  • Delphuk © (09.10.07 14:50) [11]
    Спасибо, пока что штатных средств KOL хватает, если не будет хватать места, то конечно же посмотрю вашу реализацию.
 
Конференция "KOL" » чтение/запись в ini файл [Delphi, Windows]
Есть новые Нет новых   [134431   +10][b:0][p:0.002]