| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Как в ListBox записать в определеную строчку? |
| Автор: Homer12 3.1.2007, 23:12 |
| Проблема мне надо записать текст в определеную строчку ListBox например в 0 строку вот код берет текст Edit1.text:=ListBox1.Items[0]; а вторая проблема я не могу проверить есть одинаковый текст в ListBox например: я вожу два раза одно и тоже слово и он должен выдать что такоу слово есть в списки Зарание блогодарен. |
| Автор: anwe 3.1.2007, 23:19 | ||
занесет в edit строчку из листа. Надо наоборот:
|
| Автор: Sunvas 4.1.2007, 00:21 |
| http://forum.vingrad.ru/topic-124897/0.html |
| Автор: alf138 15.11.2009, 12:59 | ||
BoxТакая проблема нужно сравнить две строчки в ListBox, т.е 2и4, 5и7, 8и10 срочки находятся и выводятся в ListBox
|
| Автор: Данкинг 15.11.2009, 13:08 |
| if ListBox1.Items.Strings[2]=ListBox1.Items.Strings[4] ........ |
| Автор: alf138 15.11.2009, 13:18 |
| Большое спасибо. Осталось придумать алгоритм проверки. |
| Автор: Данкинг 15.11.2009, 13:56 |
| А какой алгоритм может быть: проходишь в цикле по строчкам и сравниваешь. |
| Автор: alf138 15.11.2009, 14:05 |
| Так у меня получилось что например в строчке 2 есть что то а вот в 4 еще нету так вот еще, обьясню подробнее у меня задание создать подобие игры в города на технологии socket, т.е один игрок посылает название вот у меня получается 1 строчка = само название города 2 строчка = последний эллемент в этом слове 3 строчка = первый эллемент. Теперь мне на сервере нужно придумать цикл чтобы при ошибки он еще и отправлял сообщение клиент о неправильном слове . |
| Автор: alf138 15.11.2009, 15:21 | ||||
Спасибо огромное, получилось. Теперь алгоритм остался
И какой тут алгорим ... Что то на ум не чего не приходит. При том нужно заменить одну строчку
2=>4 5=>7 8=>10 |
| Автор: amsoft 15.11.2009, 16:44 | ||||
чтобы пробежаться по всему списку, можно сделать так
PS
делим на 3, т.к. в списке кол-во строк всегда кратно 3, а отнимаем 2, чтобы цикл начал работать, когда в списке кол-во строк не меньше 6 |
| Автор: alf138 15.11.2009, 17:38 | ||
Не работает, первый раз отрабатывает потом затухает.
Притом первый раз отрабатывает не отправляя сообщения а потмо на все шлет безразлично какие буквы первая или последняя. |
| Автор: amsoft 15.11.2009, 18:22 |
| все работает у тебя же должны быть равны строки с индексами 2 и 4, 5 и 7 а в твоем примере строка с индексом 2 равна а, 4 строка - х, 5 - а, 7 - л поэтому и не работает |
| Автор: alf138 21.11.2009, 11:27 | ||
Мучил неделю не чего сдвинуть не могу все как было так и осталось
Все циклы котрые писали выше впихнуть не удалось, или ошибка или работает один раз. Подскажите пожалуйста где неправильно ? |
| Автор: amsoft 21.11.2009, 14:14 | ||
| мне не понятна структура твоего списка у тебя список имеет такой вид: 0: название города1 1: последняя буква 2: первая буква 3: название города2 4: последняя буква 5: первая буква теперь ты сравниваешь строку 2 со строкой 4 (т.е. первую букву в названии города1 с последней буквой в названии города2) По-моему последняя буква в названии города1 должна совпадать с первой буквой в названии города2 Поменяй список на такой вид: 0: название города1 1: первая буква 2: последняя буква 3: название города2 4: первая буква 5: последняя буква теперь можешь сравнивать строку 2 со строкой 4, 5 с 7, 8 с 10 с помощью следующего кода
в этом коде всегда проверяются только последние строки в списке (по-моему тебе это и надо) |
| Автор: alf138 21.11.2009, 17:24 |
| Спасибо большое, просто огромное. Неделю бился, и ваше пытался передлать. Эххх хотел плюсик нажать а не активно. Если вам будет не трудно может подскажите как сохранить букву если следующее слово не на ту букву, массив придется придумывать ? Т.е. написал город а следующий город не на ту букву, что бы сохранялась буква слова которое правильно написанно. |
| Автор: alf138 21.11.2009, 20:03 | ||
Всем спасибо огромное все сделал. Теперь все номалек просто дописал
Во останется вопрос с регистром вот не знаю, делать его или нет если да то как... Но все равно всем большое спасибо, особено "amsoft". |
| Автор: amsoft 21.11.2009, 20:25 |
| насчет регистра: AnsiUpperCase - перевод текста в верхний регистр AnsiLowerCase - перевод текста в нижний регистр PS Не за что |
| Автор: kami 21.11.2009, 22:11 |
Код действителен до момента, когда начнет действовать алгоритм Нагла, ибо разбиение и склейку пакетов никто не отменял. |
| Автор: alf138 26.11.2009, 04:21 |
| Опять вас побеспокою, вопрос такой. Нужно сделать два цикла первый который будет проходить по алфавиту от "а до я" а второй будет считать кол-во каждый символов. Задание звучит так Подсчитать частоту появления каждого символа в поллученном сообщение. На сколько понимаю нужно сделать два массива первый для букв, второй для кол-во раз их повления. Но остается вопрос а как выводить все это ? |
| Автор: amsoft 26.11.2009, 15:40 | ||
| alf138, по-хорошему надо было начать новую тему А теперь о главном: Каждому символу соответствует свой код, поэтому можно обойтись и с одним массивом, в ячейки которого будем записывать кол-во вхожений определенной буквы, а индекс записываемой ячейки будем определять по коду буквы. Резултат можно вывести в компоненте TListBox, который я использую в примере:
PS диапозон [192..223] - коды заглавных букв русского алфавита ,а диапозон [224..255] - коды прописных букв русского алфавита |
| Автор: alf138 27.11.2009, 20:49 | ||||
Перекопал интернет на предмет подключение новой формы, нужно что бы при запуске программы выскакива окно настройки
Если нужно создать новую тему подскажите куда. P.S. Вот думаю насчет корректности, но нужно чтобы при запуске выскакивало окно ip адреса и желательно порта подключения. Насчет алфавита
Но по приходу на клиента получается все в строчку, думаю как разделить на столбики. |
| Автор: alf138 28.11.2009, 20:48 | ||||
Все прихотдящие сообщения пишет в одну строчку, как разделить на строчки ?
Думал дописать в конце строчки запятую и разделять по строчно но как то замудренно получается
|
| Автор: Демо 28.11.2009, 21:34 | ||
Используй стандартный разделитель - #13#10. Либо TListBox.Items.Delimiter и TListBox.Items.DelimitedText |
| Автор: alf138 29.11.2009, 09:13 | ||
Не хочет не пойму что не так делаю
|
| Автор: Демо 29.11.2009, 15:26 |
В отладчике смотрел? Точно приходит нужная строка с разделителем? |
| Автор: alf138 29.11.2009, 16:16 | ||
У меня на клиента уходит такая строка
Т.е приходит "Буква А встречается в тексте 2 раза|", и так все буквы от "а до я" но не делится. И вообще пишет "Undeclared indentifier "Delimited"" |
| Автор: kami 29.11.2009, 21:22 | ||
Это хорошо, что не разбивается. А то может и приходить сперва "Буква А встре" и потом "чается в тексте 2 раза". Это только к примеру. Разбиение и склейку пакетов (повторюсь) в TCP никто не отменял. Посему - нужно над TCP надстраивать свой протокол обмена, к примеру - первые 4 байта - длина сообщения, дальше - само сообщение. И на приемной стороне накапливать принятую информацию в буфер, а потом анализировать ее на предмет полностью пришедшего сообщения. |
| Автор: amsoft 29.11.2009, 21:47 | ||||||
| alf138, на мой взгляд проще передовать не готовый текст "буква ... встречается ... раз", а передовать только данный о кол-ве вхождений каждой буквы, и затем уже на конечном компе разбирать полученную строку. Можно сделать так: 1. Заполняешь массив MyArray (как писал выше) 2. Преобразовываешь его в строку:
PS Chr(9) - знак табуляции, мы его используем для разделения значений в строке 3. Отправляешь полученную строку При приеме данной строки на другом компе разбираешь ее: 4. Пишем небольшую функцию:
PS Данная функция позволяет искать подстроку №PosNum, в строке RecordString (подстроки разделяются разделителем Divider) 5. Заполняем ListBox:
|
| Автор: alf138 30.11.2009, 08:01 |
| Вот что у меня получилось, компиляция проходит но при отправке пишет List index out of bounds(9). procedure CharCount(S: string); var MyArray: array [0..31] of integer; X,Y: integer; begin for X := 1 to Length(MyArray) do MyArray[X-1] := 0; for X := 1 to Length(S) do begin Y := Ord(S[X]); if Y in [192..223] then MyArray[Y-192] := MyArray[Y-192] + 1; if Y in [224..255] then MyArray[Y-224] := MyArray[Y-224] + 1; end; ListBox1.Clear; S:=''; for X:=1 to Length(MyArray) do S:= S+ intToStr(MyArray[X-1] )+ Chr(9); ServerSocket1.Socket.Connections[i].SendText(S); Извените что не в коде, пишу с телефона. |
| Автор: amsoft 30.11.2009, 09:51 |
| Уверен, что ошибка именно в этом куске кода? Приведи полный текст кода, выполняемый при отправке PS Убери строку ListBox1.Clear - данный компонент нужен при разборе строки на стороне клиента На будущее - внизу есть кнопка для создания новой темы |
| Автор: alf138 30.11.2009, 11:27 |
| Пдозреваю что всетаки ошибка на стороне сервера потому что запускал клиента, и отправлял сообщения на сервер мой"города" и мне приходит на клиента Буква А встречается т раз. На клиенте написанно сама процедура и вывод S:=Socket.ReceiveText; X:=1 while GetRecordItem(S,X,Chr(9)) <>do begin ListBox1.Item.Add(Все что писал добавлять); Inc(x); end; Все компиляцию проходит. Но выводит ошибку... Подскажи что сделал не так ? |
| Автор: amsoft 30.11.2009, 14:01 |
| Приведи полный текст кода, выполняемый при отправке |
| Автор: alf138 30.11.2009, 20:46 |
| Извените, все получилось. Ошибку допустил. Большое спасибо "amsoft". Во второй раз помогаешь, спасибо. |