Форум: "Начинающим";
Текущий архив: 2009.12.06;
Скачать: [xml.tar.bz2];
ВнизМнога букав в 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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.006 c