Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Символ конца строки, сохранить при считывании 
V
    Опции темы
MacTep
Дата 20.2.2007, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

Репутация: 4
Всего: 4



Предположим, есть текст, сохраненный в файле:
Код

Первая строка
Вторая строка
Третья строка
Четвертая строка
Пятая строка

После каждой строки следует символ конца строки и текст на следующей строке уже начинается с новой строки. Тавтология, но вот так. smile У меня такая задача. Мне нужно этот текст из файла считать в одну единственную (!!!) запись в StringList для того, чтобы потом можно было этот самый текст вставить в Memo поместив в него всего лишь одну эту запись. Но происходит следующее в Memo:
Код

Первая строкаВторая строкаТретья строкаЧетвертая строкаПятая строка

А мне нужно, чтобы символы конца строки сохранились. Как правильно заполнить запись StringList'а? Понимаю, что ум у меня извращенный, но вот так вот надо сделать. Причем форматирование должно сохраниться...


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
Guedda
Дата 20.2.2007, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 14
Всего: 78



Код

for i := 0 to StringList1.Count - 1 do 
  Str := Str + StringList1[i] + ' ';



--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
MacTep
Дата 20.2.2007, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

Репутация: 4
Всего: 4



Guedda, ты пытаешься все строки StringList'a записать в одну строку. Это может быть и верно. Но мне нужно все строки файла записать в одну единственную (!!!) запись StringList'а. Чувствуешь разницу???

Я пытался поставить #13, но у меня так и не получилось. Сейчас попробую твой вариант. smile Хотя что-то маловероятно...

Это сообщение отредактировал(а) MacTep - 20.2.2007, 12:50


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
Guedda
Дата 20.2.2007, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 14
Всего: 78



У меня сейчас нет Дельфи под рукой, поэтому не могу проверить... Но в TMemo, есть такое свойство, как Text;
Попробуй файл загрузить в TMemo, и использовать Str := Memo1.Text;


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
MacTep
Дата 20.2.2007, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

Репутация: 4
Всего: 4



Попробовал. Ни фига. smile Как и предполагалось, просто вставляется между ними пробел и все. smile А мне надо, чтобы в мемо они выглядели так же, как и в файле, то есть начиналась каждая строка с начала строки, как бы глупо это не звучало.

Добавлено @ 12:53 
Guedda, в том-то и дело, что если бы этот текст был единственным содержимым файла. В файле помимо этого текста хранится еще куча всего. Поэтому я так и извращаюсь. Мне именно этот отрезок надо правильно сохранить в StringList'е и потом отобразить.


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
Guedda
Дата 20.2.2007, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 14
Всего: 78



Цитата(MacTep @  20.2.2007,  12:48 Найти цитируемый пост)
Но мне нужно все строки файла записать в одну единственную (!!!) запись StringList'а. Чувствуешь разницу???

тогда так:
Код

var
  f : TextFile;
  Str, TempStr : string;
begin
  AssignFile(f, 'MyFile.txt');
  Reset(f);
  while not eof(f) do begin
    Readln(f, TempStr);
    Str := Str + TemoStr;
  end;
  CloseFile(f);
  StringList1.Add(Str);
end;

Пойдёт?

Добавлено @ 12:54 
Расскажи подробнее, что тебе именно надо сделать. Может есть другие, более лёгкие, пути решения проблемы...


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Yanis
Дата 20.2.2007, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



MacTep
Мдя... Горе от ума... Ты хоть понимаешь, что TStringList и устроен на CrLf? Поэтому везде где стоит CrLf начинается новая строка.

Это сообщение отредактировал(а) Yanis - 20.2.2007, 12:56


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Sunvas
Дата 20.2.2007, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



MacTep, что ты подразумеваешь под одной единственной записью в стринглисте?  smile 
Предположу:
Код

var s:tstringlist;
begin
s:=tstringlist.Create;
s.LoadFromFile('d:\1.txt');
memo1.Lines:=s;
s.Free;



--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
MacTep
Дата 20.2.2007, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

Репутация: 4
Всего: 4



Guedda, блин, вот так, как ты написал у меня и раньше было:
Код

      while not eof(f) do
        begin
          Readln(f,s);
          s:=copy(s,4,length(s)-6);
          sl.Add(s);
          Readln(f,s);
          sl.Add(s);
          // отсюда начинается то, что не работает
          text:='';
          while s<>'***end***' do
            begin
              Readln(f,s);
              if s='***end***' then
                break;
              text:=text+' '+s;
            end;
          sl.Add(text);
        end;

И вот после этого я делаю так:
Код

Memo1.Text:=sl.Strings[ComboBox1.ItemIndex*3+2];

Не обращайте внимания на индексы все эти, они правильные и работают. Дело в том, что в Memo потом появляется текст без ентеров в конце строки...

Добавлено @ 13:01 
Yanis, ну вот у меня везде стоит CrLf вроде как, а новая строка не начинается. Скажите, где моя ошибка...


Sunvas, это значит, что только текст весь из файла добавляется всего лишь одной командой Add: 
Код

sl.Add(text);



--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
Yanis
Дата 20.2.2007, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



MacTep
Забей на свой первый пост и сформулируй вопрос нормально. Никто не понимает чего тебе надо smile


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
MacTep
Дата 20.2.2007, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

Репутация: 4
Всего: 4



У меня есть файл, в котором хранится много чего. Помимо этого в файле есть строки:
Код

Первая строка
Вторая строка
Третья строка
Четвертая строка
Пятая строка

Этот текст в файле располагается так, как написан, то есть именно в 5 строчек.

Мне нужно этот текст из файла в конечном счете поместить в Memo, чтобы пользователь мог его редактировать. А потом снова сохранить в файл. Я так поступаю: я сначала данный текст из 5 строчек считываю в StringList. Вот код:
Код

     while not eof(f) do
        begin
          Readln(f,s);
          s:=copy(s,4,length(s)-6);
          sl.Add(s);
          Readln(f,s);
          sl.Add(s);
          // отсюда начинается то, что не работает
          text:='';
          while s<>'***end***' do
            begin
              Readln(f,s);
              if s='***end***' then
                break;
              text:=text+' '+s;
            end;
          sl.Add(text);
        end;

После этого просто вывожу в Мемо:
Код

Memo1.Text:=sl.Strings[ComboBox1.ItemIndex*3+2];

Но в Мемо этот текст отображается не в пять строчек, а в одну, что мне совсем не нужно. Форматирование должно сохраниться. Вот я и спрашиваю, как же добиться того, чтобы текст не теряло форматирование, а был всегда написан в пять строчек?

Сейчас понятно объяснил? smile

Это сообщение отредактировал(а) MacTep - 20.2.2007, 14:10


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
Yanis
Дата 20.2.2007, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



А почему бы не:
Код
var
  sl: TStringList;
begin
  sl := TStringList.Create;
  sl.LoadFromFile('C:\Radmin.txt');
  Memo1.Lines.Assign(sl);
  // or Memo1.Lines.AddStrings(sl);
  FreeAndNil(sl);
end;

Или я опять неправильно всё понял smile

Это сообщение отредактировал(а) Yanis - 20.2.2007, 13:23


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
MacTep
Дата 20.2.2007, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

Репутация: 4
Всего: 4



Yanis 

Код

 sl.LoadFromFile('C:\Radmin.txt');


Так вообще нельзя, так как у меня в файле куча информации, которую еще надо разобрать, а не просто тупо поместить в стринглист.

Это сообщение отредактировал(а) MacTep - 20.2.2007, 14:08


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
Alexeis
Дата 20.2.2007, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(MacTep @  20.2.2007,  13:40 Найти цитируемый пост)
Так вообще нельзя так как у меня в файле куча информации, которую еще надо разобрать, а не просто тупо поместить в стринглист. 

  А может загрузить нужный фрагмент данных из файлового потока? Сделаеть TMemoryStream забросить в него фрагмент текста, а потом стринглистом сделать LoadFromStream.

Это сообщение отредактировал(а) Alexeis - 20.2.2007, 14:05


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
MacTep
Дата 20.2.2007, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

Репутация: 4
Всего: 4



Alexeis, кстати, вполне похоже на правду... Можно примерчик?


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0768 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.