Текущий архив: 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