![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запись в ini-файл строки имеющей переводы строки [D7, XP]
Гость © (2010-08-27 10:11:00)Пишу в ini-файл так:
function WriteIniTest() : Boolean;
var
AppIni: TIniFile;
begin
AppIni := TIniFile.Create('test.ini);
try
AppIni.WriteString('test', 'test', 'строка 1' +#13#10 +'строка 2');
ShowMessage( AppIni.ReadString('test', 'test', '') );
finally
AppIni.Free;
end;
end;
Получаю ответ: "строка 1".
Файл выглядит так:
[test]
test=строка 1
строка 2
Как сделать, чтобы строки писались с переводами строки?
Leonid Troyanovsky (2010-08-30 10:36:00) [1]
> Гость (30.08.10 09:24) [28]
> какие функции производят перевод строк в такой вид и из
> такого в обычный?
procedure TForm1.Button1Click(Sender: TObject);
var
ms: TStringStream;
p : TParser;
begin
ms := TStringStream.Create(Edit1.Text);
p := TParser.Create(ms);
while (p.Token = toString) do
begin
Memo1.Lines.Add(p.TokenString);
p.NextToken;
end;
p.Free;
ms.Free;
end;
procedure TForm1.Button2Click(Sender: TObject);
const
sCRLF : String = '#13#10';
var
i: Longint;
s: String;
begin
s:= '';
for i := 0 to Memo1.Lines.Count-1 do
s := s + QuotedStr(Memo1.Lines[i])+ sCRLF;
Delete(s, Length(s)-Length(sCRLF)+1, Length(sCRLF));
Edit1.Text := s;
end;
const
s0 : String = '''Строка 1''#13#10''Строка 2''#13#10''Строка 3''';
procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.Text := s0;
end;
--
Regards, LVT.
кефирчик 3.2 (2010-08-30 10:15:00) [2]
> Никто так и не знает какие функции производят
str := 'строка 1'+#13#10+'строка 2';
s := #27 + StringReplace(Str, #13#10, #27 + '+#13#10+' + #27, [rfReplaceAll]) + #27;
Обратно
Delete(str, 1, 1);
Delete(str, 1, Length(str));
s := StringReplace(Str, #27 + '+#13#10+' + #27, #13#10, [rfReplaceAll]);
RWolf (2010-08-30 10:10:00) [3]
> Гость (30.08.10 09:24) [28]
[6] же.
Anatoly Podgoretsky (2010-08-30 09:31:00) [4]> Юрий Зотов (30.08.2010 01:16:24) [24]
Да ну творческий :-)
Обычное - лишь бы не работать.
Гость (2010-08-30 09:24:00) [5]
> Palladin © (30.08.10 00:41) [21]
>
> есть как минимум 4 способа сохранить многострочный текст
> в ини... два указано тут
Один из них - это видимо способ Паскаля, представлять строки в виде: 'строка 1'+#13#10+'строка 2' ? Никто так и не знает какие функции производят перевод строк в такой вид и из такого в обычный?
George (2010-08-30 02:51:00) [6]Я бы в Base64 записал бы и не парился. )
Германн (2010-08-30 02:29:00) [7]Ах да.
Борланд виноват ещё и в том, что не позаботился о разработке компонента TTextFile
http://www.delphikingdom.com/asp/answer.asp?IDAnswer=77907
Германн (2010-08-30 02:21:00) [8]
> Юрий Зотов © (30.08.10 01:16) [24]
>
> Мужики, не мешайте. Человек ищет универсальный способ.
Универсальный способ универсальной работы с файлами.
Это явная недоработка Борланда (как бы он там сейчас не назывался). Помимо TIniFile ему (Борланду) следовало бы разработать классы TTypedFile, TUnTypedFile. И методы для них.
:)
Только универсальный способ на основе TIniFile не получится за один месяц.
:)
Юрий Зотов (2010-08-30 01:16:00) [9]Мужики, не мешайте. Человек ищет универсальный способ. А ради универсальности и месяц потерять не жалко. Правда, с 99%-ной вероятностью этот универсальный способ нигде, кроме одной-единственной программы использован не будет, но зато - творческий поиск.
PS
Хотя, конечно, свой формат делается максимум за пару часов - но ведь очень хочется использовать INI. Который, правда, уже INI не будет.
Германн (2010-08-30 00:50:00) [10]
> И пятый самый правильный.
>
+1
Anatoly Podgoretsky (2010-08-30 00:45:00) [11]> Palladin (30.08.2010 00:41:21) [21]
Пятый - это свой формат. И пятый самый правильный.
Palladin (2010-08-30 00:41:00) [12]есть как минимум 4 способа сохранить многострочный текст в ини... два указано тут, третий только что подсказал Анатоль, четвертый - кустарный с сохранением количества строк и каждой строки отдельно с наименованиями LineN ...
с момента вопроса прошло три дня... причем способ про CommaText был подсказан практически в самом начале...
прошлая ветка длилась неделю...
откуда вы такие беретесь
Anatoly Podgoretsky (2010-08-30 00:30:00) [13]> Гость (30.08.2010 00:04:18) [18]
Это не просто, а очень просто, существуе правило экранирования специальных
символов.
Юрий Зотов (2010-08-30 00:11:00) [14]> Гость (30.08.10 00:04) [18]
> А если в тексте будет содержаться #13
И что? Это же #13, а не комбинация #13#10. Все нормально сработает.
> Это всё не универсальные подходы.
Что ж, ищите универсальный. Удачи!
Гость (2010-08-30 00:04:00) [15]
> Чем [5] не устраивает? Перед записью меняем #13$10 на #1,
> после чтения меняем обратно. Т.е. 2 раза StringReplace
> - и никаких проблем..
А если в тексте будет содержаться #13. Это всё не универсальные подходы.
Юрий Зотов (2010-08-28 16:22:00) [16]
> Гость (27.08.10 16:16) [13]
Чем [5] не устраивает? Перед записью меняем #13$10 на #1, после чтения меняем обратно. Т.е. 2 раза StringReplace - и никаких проблем..
Джо (2010-08-27 19:12:00) [17]3. (Last but not least) писать все в бинарном формате.
Медвежонок Пятачок (2010-08-27 16:26:00) [18]1. Отказаться от ини в пользу xml
2. Перед записью значения заменять CRLF на метасимвол $CRLF (при чтении наоборот, менять метасимвол на CRLF)
/* это возможные решения в порядке убывания "правильности" */
Anatoly Podgoretsky (2010-08-27 16:20:00) [19]> Гость (27.08.2010 16:16:13) [13]
В [0] две строки
Гость (2010-08-27 16:16:00) [20]
> Anatoly Podgoretsky © (27.08.10 16:08) [11]
>
> S := 'строка 1'+#13#10+'строка 2';
Текст ( 'строка 1'+#13#10+'строка 2' ) загружается из ini-файла.
> приведи пример твоего "нормального" текста.
[0]