Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-73131
Explorer
2002-05-13 13:18
2002.05.23
QReport


3-73006
jonik pegas
2002-04-25 14:23
2002.05.23
Null в поле Integer


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


1-73246
VG
2002-05-10 00:19
2002.05.23
Scrolling в TreeView


14-73373
ATLANTIDO
2002-04-13 16:08
2002.05.23
LockFile ????





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский