Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.07.20;
Скачать: CL | DM;

Вниз

чтение/запись в ini файл   Найти похожие ветки 

 
Delphuk ©   (2007-10-05 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 ©   (2007-10-05 12:35) [1]

P.S.
Поправочка, при чтении указывают ту же секцию ini.Section := "testing"


 
Robt   (2007-10-05 14:12) [2]


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

почему не подходит ?
сохраняеш одну строку где вместо интера (#13#10) другой символ и наоборот
функции соответствущие есть


 
Дмитрий К ©   (2007-10-05 14:14) [3]

SizeOf заменить на Length.
Выделять память при чтении (SetLength) столько, сколько было записано, т.е. нужно запоминать длину строки.


 
Robt   (2007-10-05 14:19) [4]

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


 
Delphuk ©   (2007-10-05 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 ©   (2007-10-08 16:30) [6]


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

strreplace например :)


 
Vladimir Kladov ©   (2007-10-08 20:27) [7]

Гораздо правильнее каждую строку сохранять как отдельную строку. И в любом случае, учтите, что при использовании старых платформ (9х) ини файл не должен превышать 32 (или 64) К.


 
Delphuk ©   (2007-10-08 22:45) [8]

Robt писал:
почему не подходит ?
сохраняеш одну строку где вместо интера (#13#10) другой символ и наоборот
функции соответствущие есть
strreplace например :)


Спасибо, именно так и сделал :) Вот как бывает, когда мало юзаешь строки а работаешь только с математикой :)
Vladimir Kladov, а какие ограничения на длину одной строки при использовании ValueString?


 
Robt ©   (2007-10-09 12:39) [9]

размер буфера в ValueString = 4095
и используются системные функции такчто может и ещо меньше
если многа надо луче свой формат стелать


 
mdw ©   (2007-10-09 13:54) [10]

Я недавно реализовал IniFile для winCE, работает аналогично стандартному, но основан на StrList, т.е. не ограничен в размерах. Попробуй, может подойдет?


 
Delphuk ©   (2007-10-09 14:50) [11]

Спасибо, пока что штатных средств KOL хватает, если не будет хватать места, то конечно же посмотрю вашу реализацию.



Страницы: 1 вся ветка

Текущий архив: 2008.07.20;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.017 c
2-1213869168
NeiL
2008-06-19 13:52
2008.07.20
Компонент


4-1193306040
MAXIMUS
2007-10-25 13:54
2008.07.20
Как установить русскую раскладку по умолчанию?


2-1213947379
uno-84
2008-06-20 11:36
2008.07.20
Передача ссылки на файл по почтовику


15-1212455954
brother
2008-06-03 05:19
2008.07.20
Мерцание 2х LCD мониторов (LG)


8-1182769628
DV
2007-06-25 15:07
2008.07.20
перечисление пинов