Форум: "Основная";
Текущий архив: 2002.05.23;
Скачать: [xml.tar.bz2];
ВнизЗамкнутый круг. Как закончить цикл? Найти похожие ветки
← →
UDS (2002-04-28 21:28) [0]Цикл заполняет строками Tmemo2 из TMemo1. Как без ошибки закончить заполнение, если ничего не добавляется.(Блин, как то криво нарисовал проблему...). Если использовать счетчик
for i=0 to n do,
тогда если значение n в нем превышает количество строк в TMemo1, то происходит ошибка в программе. Помогите!
← →
Doom (2002-04-28 21:32) [1]код приведи
← →
Anatoly Podgoretsky (2002-04-28 21:34) [2]А зачем превышаешь?
← →
alxx (2002-04-28 21:41) [3]If i>=Memo1.Lines.Count Then Break;
А вообще-то надо так, наверное:
For i:=0 to Memo1.Lines.Count-1 do
← →
UDS (2002-04-28 21:54) [4]На момент запуска программы в TMemo1 ни фига нету. Пользователь вводит через запятую несколько Фамилий Имен и Отчеств: Иванов Иван Иванович, Колбасюк Екатерина Семеновна, Петров Федор Николаевич,... ну и т.д. После нажатия на TButton все эти данные выводятся в столбик в TMemo2.
begin
with TstringList.Create do
try
text:=memo1.text;
text:=StringReplace(Text,#32,#13#10,[rfReplaceAll]);
// Заменяем в строке Text пробелы на символ
// #13#10
// благодаря чему записи автоматически
// рассортировываются в Strings
n:=0;
if memo1.Text<>"" then begin
for t:=0 to 3 do //!!!!!!!!! Если в TMemo введено меньше 3-х
// записей, то произойдет ошибка
begin
f:=strings[n];
i:=strings[n+1];
o:=strings[n+2];
memo2.lines.add(f+" "+i+" "+o);
n:=n+3;
end;end;
finally
free
end;
end;
А как сказать,чтоб не превышало?
← →
Malder (2002-04-28 21:57) [5]UDS, а что такое n ? Если просто перенести из одного memo в другое, то децствительно: For i:=0 to Memo1.Lines.Count-1 do
P.S. Хотя, а почемy бы не написать просто: Memo1.lines:=memo2.lines
← →
UDS (2002-04-28 22:06) [6]>Malder © (28.04.02 21:57)
>UDS, а что такое n ? Если просто перенести из одного memo в >другое, то децствительно: For i:=0 to Memo1.Lines.Count-1 do
>P.S. Хотя, а почемy бы не написать просто: >Memo1.lines:=memo2.lines
Во первых как я уже сказал надо чтобы в Memo2 данные типа ФИО выстраивались в столбик, в отличие от Memo1, где все ФИО идут подряд через запятую, поэтому вариант с простым переносом тут не прокатит.
Во вторых далее их будет легче сортировать: ФИО,ИОФ,ФОИ, и т.д.
А вот For i:=0 to Memo1.Lines.Count-1 щас попробую.Спасибо.
← →
UDS (2002-04-28 22:12) [7]>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
иначе передает данные не корректно. Еще раз спасибо!
← →
UDS (2002-04-28 22:20) [8]Не... Поторопился! И так и так косячит! Блин!
← →
Song (2002-04-28 22:24) [9]Если у Вас в Memo1 данные идут через запятую, тогда StringReplace не даст правильного результата. Для начала Вам нужно запятую поменить на #13#10, чтобы ФИО было на каждой строке, а только после этого разносить отдельные части ФИО в разные TMemo
← →
UDS (2002-04-28 22:30) [10]>Song
Согласен, Миша, проблемы с запятой будут, когда начну сортировать. Но сейчас мне надо перенести все ФИО в столбик из Mtmo1 в TMemo2.
← →
Song (2002-04-28 22:36) [11]Дык я Вам про это и говорю:
Переведите запятую в перевод строки и данные автоматически выстроятся в столбик:
М.А.Герасимова, Н.А. Куликова, Х.А.Смирнова
заменяете "," на #13#10 получается
М.А.Герасимова
Н.А. Куликова
Х.А.Смирнова
Разве не данный столбик Вам нужен?
← →
UDS (2002-04-28 22:41) [12]>Song © (28.04.02 22:36)
Не совсем такой, немного проще:
Иванов Иван Иванович, Колбасюк Екатерина Семеновна, Петров Федор Николаевич,... ну и т.д.
должно получиться:
Иванов Иван Иванович
Колбасюк Екатерина Семеновна
Петров Федор Николаевич
← →
Aleks1 (2002-04-28 23:03) [13]Ну так и чем плох совет Song? Только заменять нужно не пробелы, а запятые.
← →
UDS (2002-04-28 23:12) [14]Сделал!!!! От запятой избавился #44,#13#10.В столбик ФИО выстраиваются. Теперь бы вот еще попытаться сортировать... Вот тут как раз и наклевывается цикл.(Замкнутый круг)
Ведь нам не известно сколько ФИО введет пользователь. Отсюда и переменная n. Но вот как сказать, что n должно быть равно количеству введеных ФИО, ведь в Memo1 они еще не разбиты(и значит не посчитаны), а из Memo2 это количество не возьмешь(так как Memo2 как раз этим циклом должно заполняться)???????????????
← →
Aleks1 (2002-04-28 23:20) [15]Попробуй сначала эти строки засунуть в динамически созданный TStringList, в котором установи Sorted в True. А уж из него в Memo2.
← →
UDS (2002-04-28 23:41) [16]Увы! Я слабо знаком с динамически создаваемым 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;
Если кто сможет, помогите!!! Буду завтра. Заранее спасибо.
← →
Song (2002-04-29 09:08) [17]ну Вы и наворочали....
With TStringList.Create Do
try
Sorted:=True;
Text:=StringReplace(Memo1.Text,",",#13#10);
Memo2.Text:=Text;
finally
Free;
end;
Всё! Больше ничего не надо!
← →
UDS (2002-04-29 22:17) [18]>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"и . Так что если никто не подскажет , то я и знать не буду.
Кстати тут местные светлые головы говорили, что эту задачу можно решить путем записи данных в файлы и с использованием массивов. Но это по-моему будет ещё более "навороченнее".
← →
UDS (2002-05-01 00:40) [19]?????????????????????
← →
MBo (2002-05-01 00:47) [20]если online, в чат зайди
← →
Aleks1 (2002-05-01 02:53) [21]Я первый упомянул в ответе на твой вопрос словосочетание "Динамически создаваемый TStringList" С меня тогда и спрос.
Ну, во-первых, "динамически создаваемый" - это означает, что данный объект не существует при разработке в дизайнере Дельфи, а появляется только лишь в процессе работы приложения. Во-вторых, TStringList - не визуальный компонент, и его нельзя создать иначе чем динамически.
В-третьих. А HELP для чего, по-твоему?
Ведь я предложил тебе только способ, не изобретая велосипед, воспользоватся уже готовыми средствами для сортировки.
← →
Aleks1 (2002-05-01 04:09) [22]Да, я действительно "Слишком много выпил", но, похоже, уже несколько протрезвел. Конечно, "визуальность" тут не важна. В Дельфи полно "не визуальных компонент", которые существуют в "Design time". Но TStringList отсутствует в "Палитре компонент", поэтому и не может существовать в "Design time". Хотя, некоторые, могут добавить его в палитру, если они его часто используют.
← →
Song (2002-05-01 09:23) [23]2UDS © (01.05.02 00:40)
У TStringList есть метод CustomSort. Он позволяет сортировать как угодно.
← →
UDS (2002-05-09 00:00) [24]>Song © (01.05.02 09:23)
>2UDS © (01.05.02 00:40)
>У TStringList есть метод CustomSort. Он позволяет сортировать >как угодно.
Где об этом можно почитать? Кроме хелпа...
← →
Song (2002-05-09 10:25) [25]в инете.
← →
Agent Smith (2002-05-09 16:11) [26]goto вроде подойдет, или я не понял проблемы
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.05.23;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.01 c