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

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

Запись в ini-файл строки имеющей переводы строки [D7, XP]


Страницы:   1 2

Гость ©   (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]


Страницы:   1 2

Наверх

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