Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2014, 23:35   #1
FleXik
Форумчанин
 
Регистрация: 01.11.2012
Сообщений: 770
Вопрос Нужно записать несколько строк по-очереди в переменную...

Вобщем в обычной переменной типа string как все знают нельзя по-очереди записать по одной строке (например) т.к данные будут перезаписываться, поэтому для этого сущействует переменные типа TStringList или массивы, вобщем вопрос, есть ли способы это реализовать другим способом, не используя TStringList или массив?
FleXik вне форума Ответить с цитированием
Старый 16.05.2014, 00:06   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Код:
s := '';
if length(s) = 0 then
  s := 'string'
else
  s := s + sLineBreak + 'string';
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 16.05.2014, 00:10   #3
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,869
По умолчанию

Цитата:
Сообщение от FleXik Посмотреть сообщение
Вобщем в обычной переменной типа string как все знают нельзя по-очереди записать по одной строке (например) т.к данные будут перезаписываться, поэтому для этого сущействует переменные типа TStringList или массивы, вобщем вопрос, есть ли способы это реализовать другим способом, не используя TStringList или массив?
Главное скажи зачем это нужно? Что потом с этой переменной предстоит делать?
northener вне форума Ответить с цитированием
Старый 16.05.2014, 02:17   #4
FleXik
Форумчанин
 
Регистрация: 01.11.2012
Сообщений: 770
По умолчанию

Цитата:
Главное скажи зачем это нужно? Что потом с этой переменной предстоит делать?
Код:
for j:=0 to m-1 do
begin

   if i<Str.Count then
   Arr.Add(Str[i]);

   if Pos('test', Memo1.Text)<>0 then
   Memo1.Text:=StringReplace(Memo1.Text, 'test', Arr.Text, [rfReplaceAll, rfIgnoreCase]);

inc(i);
end;
вот, и Memo1.Text уже потом подставляется в запросы вне цикла, но, у меня есть несколько слов 'test' которые должны заменяться с помощью StringReplace на загруженные из .txt файла (переменная Str[i]) строки по-очереди, но получается что Memo1.Text в цикле просто перезаписывается вместо того чтобы накапливать строки
FleXik вне форума Ответить с цитированием
Старый 16.05.2014, 02:39   #5
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,869
По умолчанию

Цитата:
Сообщение от FleXik Посмотреть сообщение
Код:
for j:=0 to m-1 do
begin

   if i<Str.Count then
   Arr.Add(Str[i]);

   if Pos('test', Memo1.Text)<>0 then
   Memo1.Text:=StringReplace(Memo1.Text, 'test', Arr.Text, [rfReplaceAll, rfIgnoreCase]);

inc(i);
end;
вот, и Memo1.Text уже потом подставляется в запросы вне цикла, но, у меня есть несколько слов 'test' которые должны заменяться с помощью StringReplace на загруженные из .txt файла (переменная Str[i]) строки по-очереди, но получается что Memo1.Text в цикле просто перезаписывается вместо того чтобы накапливать строки
Тогда нужно начать с начала. С описания задачи.
northener вне форума Ответить с цитированием
Старый 16.05.2014, 02:40   #6
FleXik
Форумчанин
 
Регистрация: 01.11.2012
Сообщений: 770
По умолчанию

Цитата:
Тогда нужно начать с начала. С описания задачи.
в каком смысле? я описал задачу

Вобщем обьясню еще раз...

Есть 3 строки в переменной Arr.Text (переменная типа TStringList)
Есть 3 слова test в Memo1.Text

Цель:
Заменить по-очереди три слова test по-очереди тремя строками из переменной Arr.Text


Последний раз редактировалось Stilet; 16.05.2014 в 09:47.
FleXik вне форума Ответить с цитированием
Старый 16.05.2014, 06:52   #7
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

Код:
...
   for i:=0 to arr.count-1 do
   Memo1.Text:=StringReplace(Memo1.Text, 'test', Arr.Strings[I], [{rfReplaceAll, 
}rfIgnoreCase]);
что то типа такого?
ZuBy вне форума Ответить с цитированием
Старый 16.05.2014, 06:56   #8
FleXik
Форумчанин
 
Регистрация: 01.11.2012
Сообщений: 770
По умолчанию

ZuBy, да-да, я уже так пробовал но у меня почему-то несколько раз писало, сейчас еще раз попробую

но я новой переменной делал через

Код:
ts.Add(StringReplace(Memo1.Text, 'test', Arr.Strings[I], [{rfReplaceAll, 
}rfIgnoreCase]);
мне просто нужно чтобы оно не визуально меняло в Memo а скрытно, ну всмысле записывало в переменную и эту переменную я потом бы подставлял

если записывать измененные данные в обычную переменную типа string - цикл будет перезаписывать данные т.к тип string не может дозаписывать данные, только перезапись...

Короче получается какой-то бред, при записи измененных данных в переменную типа string используя цикл способом ZuBy - на финише получаю три одинаковые строки что очень странно т.к по идее переменная типа string не может содержать несколько строк при записи по одной строке т.к данные перезаписываются

пример:
вместо:
Раз
Два
Три

получаю:
Раз
Раз
Раз

Идем дальше... при использовании переменной типа TStringList используя ts.Add на финише получаю несколько повторов даже при том что я вначале чищу ts.Clear

пример:
вместо:
Раз
Два
Три

получаю:
Раз
Раз
Раз

Два
Два
Два

Три
Три
Три

причем почему-то 3 раза вписывает да еще и повторы.. и это при том что цикл for, это не while где надо inc(i) делать..

Последний раз редактировалось Stilet; 16.05.2014 в 09:50.
FleXik вне форума Ответить с цитированием
Старый 16.05.2014, 07:25   #9
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

Код:
var
  I: Integer;
begin
  for I := 0 to Memo1.Lines.count - 1 do
    Memo1.Text := StringReplace(Memo1.Text, 'test', Memo2.Lines[I], [rfIgnoreCase]);
Все работает как нужно, не пойму что у вас не получается

Memo1 - хранит test, а Memo2 -хранит Раз, Два, Три
ZuBy вне форума Ответить с цитированием
Старый 16.05.2014, 07:30   #10
FleXik
Форумчанин
 
Регистрация: 01.11.2012
Сообщений: 770
По умолчанию

1. Я не заметил знаков { } в [] в StringReplace
2. Не помогает т.к я даже скриншот давал что test не одно а три

одно test оно заменяет, спора нет, а вот остальные - нет, на первой странице я добавил скриншот и там видно как есть и как должно быть, внимательнее посмотрите.


Последний раз редактировалось FleXik; 16.05.2014 в 07:32.
FleXik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
записать в переменную строку с кавычками Ale}{ander PHP 3 04.01.2014 22:32
результат запроса записать в переменную hunter03 Помощь студентам 3 08.10.2012 20:50
Нужно разбить фаил на несколько строк (Delphi) kakawkin Помощь студентам 2 18.04.2011 13:28
как записать предпоследний элемент очереди в ячейку? taorange Паскаль, Turbo Pascal, PascalABC.NET 0 27.05.2010 21:38