Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.05.23;
Скачать: CL | DM;

Вниз

Замкнутый круг. Как закончить цикл?   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.019 c
4-73455
Mastak
2002-03-10 01:17
2002.05.23
Функция EnumCachedResources


1-73240
Garry
2002-05-10 10:35
2002.05.23
Как отобразить сообщение при наведении мыши на объект?


7-73427
BMax
2002-02-24 12:21
2002.05.23
Реестр


1-73095
Юляша
2002-05-08 22:33
2002.05.23
Определение даты в MonthCalendar


1-73186
Коля
2002-05-14 10:23
2002.05.23
Программа пропадает