Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.11.21;
Скачать: CL | DM;

Вниз

Запись в ini-файл строки имеющей переводы строки   Найти похожие ветки 

 
Гость   (2010-08-27 10:11) [0]

Пишу в 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

Как сделать, чтобы строки писались с переводами строки?


 
Anatoly Podgoretsky ©   (2010-08-27 10:19) [1]

> Гость  (27.08.2010 10:11:00)  [0]

Это уже не ини, даже если оно называется test.ini


 
Гость   (2010-08-27 10:49) [2]

Существует ли стандартная функция превращения строки в паскалевскую строку?

То есть чтобы строка была преобразована к виду: "строка 1"+#13#10+"строка 2", а потом обратно?


 
brother ©   (2010-08-27 10:50) [3]

Ндя, Анатолий! Удачи ;)


 
Anatoly Podgoretsky ©   (2010-08-27 10:58) [4]

> Гость  (27.08.2010 10:49:02)  [2]

Существует, если ты скажешь что это.


 
{RASkov} ©   (2010-08-27 12:59) [5]

в ини хранить "строка1;строка2;строка3" а при чтении StringReplace


 
RWolf ©   (2010-08-27 13:25) [6]

TStringList
исходную строку пишем в Text, результат забираем из CommaText.
и наоборот.


 
Германн ©   (2010-08-27 15:19) [7]


> Запись в ini-файл строки имеющей переводы строки

Как записать в ini-файл полное собрание сочинений Л.Н. Толстого?


 
Гость   (2010-08-27 16:01) [8]


> Anatoly Podgoretsky ©   (27.08.10 10:58) [4]
>
> > Гость  (27.08.2010 10:49:02)  [2]
>
> Существует, если ты скажешь что это.


Строки типа string, которые пишутся в редакторе Дельфи. Можно поставить курсор на string и нажать F1, там можно почитать поподробнее.


 
Гость   (2010-08-27 16:05) [9]

Или так, есть ли функция, которая могла бы паскалевскую строку типа "строка 1" +#13#10 +"строка 2", превратить в обычную, заменив все плюсы кавычки, спецсимволы, чтобы получился нормальный текст.


 
Германн ©   (2010-08-27 16:06) [10]


> Существует ли стандартная функция превращения строки в паскалевскую
> строку?

Base64, uuencode etc.
;)


 
Anatoly Podgoretsky ©   (2010-08-27 16:08) [11]

S := "строка 1"+#13#10+"строка 2";

Вот и вся функция


 
Anatoly Podgoretsky ©   (2010-08-27 16:10) [12]


> чтобы получился нормальный текст.

Чем этот не нормальный и приведи пример твоего "нормального" текста.


 
Гость   (2010-08-27 16:16) [13]


> Anatoly Podgoretsky ©   (27.08.10 16:08) [11]
>
> S := "строка 1"+#13#10+"строка 2";


Текст ( "строка 1"+#13#10+"строка 2" ) загружается из ini-файла.


> приведи пример твоего "нормального" текста.


[0]


 
Anatoly Podgoretsky ©   (2010-08-27 16:20) [14]

> Гость  (27.08.2010 16:16:13)  [13]

В [0] две строки


 
Медвежонок Пятачок ©   (2010-08-27 16:26) [15]

1. Отказаться от ини в пользу xml
2. Перед записью значения заменять CRLF на метасимвол $CRLF (при чтении наоборот, менять метасимвол на CRLF)

/* это возможные решения в порядке убывания "правильности" */


 
Джо ©   (2010-08-27 19:12) [16]

3. (Last but not least) писать все в бинарном формате.


 
Юрий Зотов ©   (2010-08-28 16:22) [17]


> Гость   (27.08.10 16:16) [13]

Чем [5] не устраивает? Перед записью меняем #13$10 на #1, после чтения меняем обратно. Т.е. 2 раза StringReplace - и никаких проблем..


 
Гость   (2010-08-30 00:04) [18]


> Чем [5] не устраивает? Перед записью меняем #13$10 на #1,
>  после чтения меняем обратно. Т.е. 2 раза StringReplace
> - и никаких проблем..


А если в тексте будет содержаться #13. Это всё не универсальные подходы.


 
Юрий Зотов ©   (2010-08-30 00:11) [19]

> Гость   (30.08.10 00:04) [18]

> А если в тексте будет содержаться #13
И что? Это же #13, а не комбинация #13#10. Все нормально сработает.

> Это всё не универсальные подходы.
Что ж, ищите универсальный. Удачи!


 
Anatoly Podgoretsky ©   (2010-08-30 00:30) [20]

> Гость  (30.08.2010 00:04:18)  [18]

Это не просто, а очень просто, существуе правило экранирования специальных
символов.


 
Palladin ©   (2010-08-30 00:41) [21]

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

с момента вопроса прошло три дня... причем способ про CommaText был подсказан практически в самом начале...
прошлая ветка длилась неделю...

откуда вы такие беретесь


 
Anatoly Podgoretsky ©   (2010-08-30 00:45) [22]

> Palladin  (30.08.2010 00:41:21)  [21]

Пятый - это свой формат. И пятый самый правильный.


 
Германн ©   (2010-08-30 00:50) [23]


> И пятый самый правильный.
>

+1


 
Юрий Зотов ©   (2010-08-30 01:16) [24]

Мужики, не мешайте. Человек ищет универсальный способ. А ради универсальности и месяц потерять не жалко. Правда, с 99%-ной вероятностью этот универсальный способ нигде, кроме одной-единственной программы использован не будет, но зато - творческий поиск.

PS
Хотя, конечно, свой формат делается максимум за пару часов - но ведь очень хочется использовать INI. Который, правда, уже INI не будет.


 
Германн ©   (2010-08-30 02:21) [25]


> Юрий Зотов ©   (30.08.10 01:16) [24]
>
> Мужики, не мешайте. Человек ищет универсальный способ.

Универсальный способ универсальной работы с файлами.
Это явная недоработка Борланда (как бы он там сейчас не назывался). Помимо TIniFile ему (Борланду) следовало бы разработать классы TTypedFile, TUnTypedFile. И методы для них.
:)

Только универсальный способ на основе TIniFile не получится за один месяц.
:)


 
Германн ©   (2010-08-30 02:29) [26]

Ах да.
Борланд виноват ещё и в том, что не позаботился о разработке компонента TTextFile
http://www.delphikingdom.com/asp/answer.asp?IDAnswer=77907


 
George ©   (2010-08-30 02:51) [27]

Я бы в Base64 записал бы и не парился. )


 
Гость   (2010-08-30 09:24) [28]


> Palladin ©   (30.08.10 00:41) [21]
>
> есть как минимум 4 способа сохранить многострочный текст
> в ини... два указано тут


Один из них - это видимо способ Паскаля, представлять строки в виде: "строка 1"+#13#10+"строка 2" ? Никто так и не знает какие функции производят перевод строк в такой вид и из такого в обычный?


 
Anatoly Podgoretsky ©   (2010-08-30 09:31) [29]

> Юрий Зотов  (30.08.2010 01:16:24)  [24]

Да ну творческий :-)
Обычное - лишь бы не работать.


 
RWolf ©   (2010-08-30 10:10) [30]


> Гость   (30.08.10 09:24) [28]

[6] же.


 
кефирчик 3.2   (2010-08-30 10:15) [31]


>  Никто так и не знает какие функции производят

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]);


 
Leonid Troyanovsky ©   (2010-08-30 10:36) [32]


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



Страницы: 1 вся ветка

Текущий архив: 2010.11.21;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.008 c
6-1228895639
Calligraff
2008-12-10 10:53
2010.11.21
Передача типов через TClientsData


15-1280664123
TComponent
2010-08-01 16:02
2010.11.21
Отправка email c командной строки


2-1283188549
Hapastiks
2010-08-30 21:15
2010.11.21
Ошыбка функцыи


15-1281385795
Юрий
2010-08-10 00:29
2010.11.21
С днем рождения ! 10 августа 2010 вторник


15-1281731393
Юрий
2010-08-14 00:29
2010.11.21
С днем рождения ! 14 августа 2010 суббота