Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Многа букав в ini файле, как?


Страницы:   1 2

Wito ©   (2009-10-20 09:19:00) 

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


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


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


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


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

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


DVM   (2009-10-20 11:37:00) [3]


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


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

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


Kolan   (2009-10-20 11:14:00) [4]

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

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


Anatoly Podgoretsky   (2009-10-20 11:03:00) [5]

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

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


Kolan   (2009-10-20 10:53:00) [6]

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


Anatoly Podgoretsky   (2009-10-20 10:48:00) [7]

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


Kolan   (2009-10-20 10:45:00) [8]

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


Anatoly Podgoretsky   (2009-10-20 10:29:00) [9]

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

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


pest   (2009-10-20 10:23:00) [10]

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

сохранение
 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;


Сергей М.   (2009-10-20 10:07:00) [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);


Kolan   (2009-10-20 10:06:00) [12]

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


Wito   (2009-10-20 10:03:00) [13]

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


Anatoly Podgoretsky   (2009-10-20 10:01:00) [14]

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

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


pest   (2009-10-20 09:51:00) [15]

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


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

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


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

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


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

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


Kolan   (2009-10-20 09:42:00) [19]

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


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

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


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

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо