![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Замкнутый круг. Как закончить цикл?
UDS © (2002-04-28 21:28:00)Цикл заполняет строками Tmemo2 из TMemo1. Как без ошибки закончить заполнение, если ничего не добавляется.(Блин, как то криво нарисовал проблему...). Если использовать счетчик
for i=0 to n do,
тогда если значение n в нем превышает количество строк в TMemo1, то происходит ошибка в программе. Помогите!
Agent Smith (2002-05-09 16:11:00) [1]goto вроде подойдет, или я не понял проблемы
Song (2002-05-09 10:25:00) [2]в инете.
UDS (2002-05-09 00:00:00) [3]>Song © (01.05.02 09:23)
>2UDS © (01.05.02 00:40)
>У TStringList есть метод CustomSort. Он позволяет сортировать >как угодно.
Где об этом можно почитать? Кроме хелпа...
Song (2002-05-01 09:23:00) [4]2UDS © (01.05.02 00:40)
У TStringList есть метод CustomSort. Он позволяет сортировать как угодно.
Aleks1 (2002-05-01 04:09:00) [5]Да, я действительно "Слишком много выпил", но, похоже, уже несколько протрезвел. Конечно, "визуальность" тут не важна. В Дельфи полно "не визуальных компонент", которые существуют в "Design time". Но TStringList отсутствует в "Палитре компонент", поэтому и не может существовать в "Design time". Хотя, некоторые, могут добавить его в палитру, если они его часто используют.
Aleks1 (2002-05-01 02:53:00) [6]Я первый упомянул в ответе на твой вопрос словосочетание "Динамически создаваемый TStringList" С меня тогда и спрос.
Ну, во-первых, "динамически создаваемый" - это означает, что данный объект не существует при разработке в дизайнере Дельфи, а появляется только лишь в процессе работы приложения. Во-вторых, TStringList - не визуальный компонент, и его нельзя создать иначе чем динамически.
В-третьих. А HELP для чего, по-твоему?
Ведь я предложил тебе только способ, не изобретая велосипед, воспользоватся уже готовыми средствами для сортировки.
MBo (2002-05-01 00:47:00) [7]если online, в чат зайди
UDS (2002-05-01 00:40:00) [8]?????????????????????
UDS (2002-04-29 22:17:00) [9]>Song © (29.04.02 09:08)
>ну Вы и наворочали....
>With TStringList.Create Do
>try
> Sorted:=True;
> Text:=StringReplace(Memo1.Text,",",#13#10);
> Memo2.Text:=Text;
>finally
> Free;
>end;
>Всё! Больше ничего не надо!
Чего то в супе не хватает.... Не работает эта фишка...
А если её привести в вид:
With TStringList.Create Do
try
Sorted:=True;
text:=memo1.text;
Text:=StringReplace(Text,",",#13#10,[rfReplaceAll]);
Memo2.Text:=Text;
finally
Free;
end;
То вроде бы работает, но не поняnно по какому принципу сортирует строки в мемо2;
И как при этом нажатием одной кнопки последовательно заносить из мемо1 в мемо2 в столбик:
1-е нажатие: Фамилии Имена Отчества;
2-е нажатие: Имена Отчества Фамилии;
3-е нажатие: Фамилии И.О.
Каждый раз обрабатывается весь список!
Я уже наверное всех достал. Но уж больно охота с этим разобраться. Я понимаете ли самоучка. В толстенном справочнике по Delphi4, который является моей настольной книгой, я не нашёл ничего про динамически создаваемые ТString"и . Так что если никто не подскажет , то я и знать не буду.
Кстати тут местные светлые головы говорили, что эту задачу можно решить путем записи данных в файлы и с использованием массивов. Но это по-моему будет ещё более "навороченнее".
Song (2002-04-29 09:08:00) [10]ну Вы и наворочали....
With TStringList.Create Do
try
Sorted:=True;
Text:=StringReplace(Memo1.Text,",",#13#10);
Memo2.Text:=Text;
finally
Free;
end;
Всё! Больше ничего не надо!
UDS (2002-04-28 23:41:00) [11]Увы! Я слабо знаком с динамически создаваемым TStringList и не знаю где в его Sorted - True. И есть опасность, что и дальше не узнаю без вашей помощи...
На данный момент у меня такой код:
procedure TForm1.Button1Click(Sender: TObject);
begin
with TstringList.Create do
try
text:=memo1.text;
text:=StringReplace(Text,#44,#13#10,[rfReplaceAll]);
// Заменяем в строке Text запятые на символ #13#10
// благодаря чему записи автоматически
// рассортировываются в Strings
if button1.Caption="Перевести в <<Фамилия Имя Отчество>>" then
begin
Memo2.text:=text;
button1.Caption:="Перевести в <<Имя Отчество Фамилия>>"
end else
if button1.Caption="Перевести в <<Имя Отчество Фамилия>>" then
begin
////Здесь должна быть сортировка <<Имя Отчество Фамилия>>
button1.Caption:="Перевести в <<Фамилия и инициалы>>"
end else
if button1.Caption="Перевести в <<Фамилия и инициалы>>" then
begin
////Здесь должна быть сортировка <<Фамилия и инициалы>>
button1.Caption:="Перевести в <<Фамилия Имя Отчество>>"
end;
finally
free
end;
end;
Если кто сможет, помогите!!! Буду завтра. Заранее спасибо.
Aleks1 (2002-04-28 23:20:00) [12]Попробуй сначала эти строки засунуть в динамически созданный TStringList, в котором установи Sorted в True. А уж из него в Memo2.
UDS (2002-04-28 23:12:00) [13]Сделал!!!! От запятой избавился #44,#13#10.В столбик ФИО выстраиваются. Теперь бы вот еще попытаться сортировать... Вот тут как раз и наклевывается цикл.(Замкнутый круг)
Ведь нам не известно сколько ФИО введет пользователь. Отсюда и переменная n. Но вот как сказать, что n должно быть равно количеству введеных ФИО, ведь в Memo1 они еще не разбиты(и значит не посчитаны), а из Memo2 это количество не возьмешь(так как Memo2 как раз этим циклом должно заполняться)???????????????
Aleks1 (2002-04-28 23:03:00) [14]Ну так и чем плох совет Song? Только заменять нужно не пробелы, а запятые.
UDS (2002-04-28 22:41:00) [15]>Song © (28.04.02 22:36)
Не совсем такой, немного проще:
Иванов Иван Иванович, Колбасюк Екатерина Семеновна, Петров Федор Николаевич,... ну и т.д.
должно получиться:
Иванов Иван Иванович
Колбасюк Екатерина Семеновна
Петров Федор Николаевич
Song (2002-04-28 22:36:00) [16]Дык я Вам про это и говорю:
Переведите запятую в перевод строки и данные автоматически выстроятся в столбик:
М.А.Герасимова, Н.А. Куликова, Х.А.Смирнова
заменяете "," на #13#10 получается
М.А.Герасимова
Н.А. Куликова
Х.А.Смирнова
Разве не данный столбик Вам нужен?
UDS (2002-04-28 22:30:00) [17]>Song
Согласен, Миша, проблемы с запятой будут, когда начну сортировать. Но сейчас мне надо перенести все ФИО в столбик из Mtmo1 в TMemo2.
Song (2002-04-28 22:24:00) [18]Если у Вас в Memo1 данные идут через запятую, тогда StringReplace не даст правильного результата. Для начала Вам нужно запятую поменить на #13#10, чтобы ФИО было на каждой строке, а только после этого разносить отдельные части ФИО в разные TMemo
UDS (2002-04-28 22:20:00) [19]Не... Поторопился! И так и так косячит! Блин!
UDS (2002-04-28 22:12:00) [20]>Malder © (28.04.02 21:57)
>UDS, а что такое n ? Если просто перенести из одного memo в >другое, то децствительно: For i:=0 to Memo1.Lines.Count-1 do
Работает! Только если
For i:=0 to Memo1.Lines.Count+1
иначе передает данные не корректно. Еще раз спасибо!