Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.005 c
2-1256030156
Л.Д.
2009-10-20 13:15
2009.12.06
Поиск в бд


11-1208529256
CutPaste
2008-04-18 18:34
2009.12.06
Обработка строк в буфере обмена


2-1255613270
pest
2009-10-15 17:27
2009.12.06
7-bit ASCII в заголовке pop письма


6-1210159869
ILNARus
2008-05-07 15:31
2009.12.06
прием данных в разных потоках


3-1230212249
Lera
2008-12-25 16:37
2009.12.06
Запрос и множество





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский