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

Вниз

Многа букав в ini файле, как?   Найти похожие ветки 

 
Wito   (2009-10-20 09:19) [0]

Есть прога, есть config.ini к ней, многострочный текст превращаю в поток (TStringStream), сохраняю в ini файл как поток. Проблема в следующем: когда текста много 2кб+ часть потока обрезается и переносится на следующую строку в ini файле, и прочитать полностью не удается.
Подскажите плз как выйти из этой ситуации.


 
Сергей М. ©   (2009-10-20 09:29) [1]

Проиллюстрируй в коде ..


 
Wito   (2009-10-20 09:39) [2]

Пишу так(s - большая строка):
st:=TStringStream.Create(s);
inif.WriteBinaryStream("Section","var1",st);


Ну и открываю инифайл, там чтото вроде этого:

var1=5271B0E5360200000100...разрыв!
1B0E536020
var2=djalgjakdsg


 
Kolan ©   (2009-10-20 09:42) [3]

Может разрыв создает средство просмотра файлов? Блокнот, например.


 
Wito   (2009-10-20 09:45) [4]

Может и так, тоесть нет ограничения на длинну строки в текст файле?


 
Сергей М. ©   (2009-10-20 09:45) [5]

А для чего вообще тут понадобился TStringStream ?


 
Wito   (2009-10-20 09:48) [6]

Ну чтоб сохранить строку в виде потока! Если сохранять мультистрочный текст в ини, то прочесть потом удастся только первую строку...


 
pest ©   (2009-10-20 09:51) [7]

я выходил из ситуации так: перед сохранением текста в ини файл заменяю символы "#13#10" например на "#01".
при чтении заменяешь обратно


 
Anatoly Podgoretsky ©   (2009-10-20 10:01) [8]

> Wito  (20.10.2009 09:39:02)  [2]

ИНИ файл не средство для хранения больших по размеру данных, используй текстовый файл.


 
Wito   (2009-10-20 10:03) [9]

А как на счет такой идеи: упаковать zlib-м строку и сохранить в виде потока!


 
Kolan ©   (2009-10-20 10:06) [10]

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


 
Сергей М. ©   (2009-10-20 10:07) [11]


> Wito   (20.10.09 09:48) [6]


Понятно.
Ну с тем же успехом можно было бы обойтись средствами BinToHex()

var
 tmp: String;
..
SetLength(tmp, Length(s) * 2);
BinToHex(PChar(tmp), PChar(s), Length(tmp));
inif.WriteString("Section", "var1", tmp);


 
pest ©   (2009-10-20 10:23) [12]

зачем все усложнять с архивированием и всякими потоками. банальная задача например сохранять двух-трех строчный хинт для каких-то элементов на форме в ини файле скажем для перевода программы на другие языки.

сохранение
 s := StringReplace(memo1.lines.text, #13#10, #01, [rfReplaceAll]);
 inifile.WriteString("main", "myhiht", s);


загрузка
 s := inifile.ReadString("main", "myhiht", "");
 s := StringReplace(s, #01, #13#10, [rfReplaceAll]);
 memo1.lines.text := s;


 
Anatoly Podgoretsky ©   (2009-10-20 10:29) [13]

> Kolan  (20.10.2009 10:06:10)  [10]

Вообще то человек тут ни причем, а то что может прочесть - это просто побочный эффект. Прочесть можно что угодно, нужен только виализатор.


 
Kolan ©   (2009-10-20 10:45) [14]

Побочный эффект чего?


 
Anatoly Podgoretsky ©   (2009-10-20 10:48) [15]

Побочный эффект формата и наличия штатного визуализатора.


 
Kolan ©   (2009-10-20 10:53) [16]

Так если формат не для чтения людьми придуман таким, то для чего тогда? Для компьютера, почему тогда не бинарный?


 
Anatoly Podgoretsky ©   (2009-10-20 11:03) [17]

> Kolan  (20.10.2009 10:53:16)  [16]

Так исторически сложилось, поскольку это универсальный формат и в крайнем случае файл можно создать и редактировать простым текстовым редактором и практически любая ОС имеет в своем составе редактор, но это побочный эффект.


 
Kolan ©   (2009-10-20 11:14) [18]

Не-не, подождите. Возможность прочесть или отредактировать — побочный эффект, ладно, пусть так.

А какой тогда основной эффект?
Универсальность? — Это вопрос стандартизации, бинарный формат тоже может быть универсальным.


 
DVM ©   (2009-10-20 11:37) [19]


> Kolan ©   (20.10.09 11:14) [18]


> бинарный формат тоже может быть универсальным.

Может, но этого сложнее добиться.


 
Плохиш ©   (2009-10-20 16:40) [20]

Прикольно, пишут в ини символы перевода строк, а спрашивают про многа букав. Неужели "здесь светлее"?


 
Loginov Dmitry ©   (2009-10-21 09:45) [21]


> Есть прога, есть config.ini к ней, многострочный текст превращаю
> в поток (TStringStream), сохраняю в ini файл как поток.
> Проблема в следующем: когда текста много 2кб+ часть потока
> обрезается и переносится на следующую строку в ini файле,
>  и прочитать полностью не удается.
> Подскажите плз как выйти из этой ситуации.


Чем работаете с ини файлами? Если используете класс TIniFile, то вы можете записать в одной строке 64К, а прочитать 2К. Если через API, то можете  записать в одной строке 64К, и прочитать 64К.
TMemIniFile лишен каких-либо ограничений, но требует монопольного владения ини-файлом. TSafeIniFile лишен указанный ограничений, не требует монопольного владения ини-файлом.



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

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

Наверх




Память: 0.52 MB
Время: 0.009 c
2-1255702102
Aleks
2009-10-16 18:08
2009.12.06
Как узнать индекс доб.итема в ListView?


11-1209014542
Алексей К.
2008-04-24 09:22
2009.12.06
Ошибка при обращении к StrList из своего объекта


15-1255081017
Alkid
2009-10-09 13:36
2009.12.06
Плагины-переводчики


2-1256051065
vadk
2009-10-20 19:04
2009.12.06
ошибка после инсталяции 6-й!


6-1180454227
AlexanderMS
2007-05-29 19:57
2009.12.06
Работа с локальной сетью.