Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как в ListBox записать в определеную строчку? как перозаписать строку в ListBox 
:(
    Опции темы
alf138
Дата 21.11.2009, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 15.11.2009

Репутация: нет
Всего: нет



Спасибо большое, просто огромное. Неделю бился, и ваше пытался передлать. Эххх хотел плюсик нажать а не активно. Если вам будет не трудно может подскажите как сохранить букву если следующее слово не на ту букву, массив придется придумывать ? Т.е. написал город а следующий город не на ту букву, что бы сохранялась буква слова которое правильно написанно.
PM MAIL   Вверх
alf138
Дата 21.11.2009, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 15.11.2009

Репутация: нет
Всего: нет



Всем спасибо огромное все сделал. Теперь все номалек просто дописал 
Код

else begin
for i := 0 to ServerSocket1.Socket.ActiveConnections - 1 do
  ServerSocket1.Socket.Connections[i].SendText('FAIL');
    ListBox1.Items.Strings[(X-2)*3+5]:= ListBox1.Items.Strings[(X-2)*3+2];

Во останется вопрос с регистром вот не знаю, делать его или нет если да то как...
Но все равно всем большое спасибо, особено "amsoft".
PM MAIL   Вверх
amsoft
Дата 21.11.2009, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 201
Регистрация: 17.10.2009
Где: KZ, Astana

Репутация: 3
Всего: 4



насчет регистра:

AnsiUpperCase - перевод текста в верхний регистр
AnsiLowerCase - перевод текста в нижний регистр

PS

Цитата(alf138 @  21.11.2009,  20:03 Найти цитируемый пост)
Но все равно всем большое спасибо, особено "amsoft"


Не за что  smile 


Это сообщение отредактировал(а) amsoft - 21.11.2009, 20:31
--------------------
"Кто бы ты ни был - не думай о себе слишком"Дельфин
PM   Вверх
kami
Дата 21.11.2009, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 23
Всего: 72



Цитата(alf138 @  21.11.2009,  11:27 Найти цитируемый пост)
 S:=IntToStr(Socket.SocketHandle)+'>'+Socket.ReceiveText;

Код действителен до момента, когда начнет действовать алгоритм Нагла, ибо разбиение и склейку пакетов никто не отменял.
PM MAIL WWW   Вверх
alf138
Дата 26.11.2009, 04:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 15.11.2009

Репутация: нет
Всего: нет



Опять вас побеспокою, вопрос такой. Нужно сделать два цикла первый который будет проходить по алфавиту от "а до я" а второй будет считать кол-во каждый символов. Задание звучит так Подсчитать частоту появления каждого символа в поллученном сообщение.  На сколько  понимаю нужно сделать два массива первый для букв, второй для кол-во раз их повления. Но остается вопрос а как выводить все это ?

Это сообщение отредактировал(а) alf138 - 26.11.2009, 04:22
PM MAIL   Вверх
amsoft
Дата 26.11.2009, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 201
Регистрация: 17.10.2009
Где: KZ, Astana

Репутация: 3
Всего: 4



alf138, по-хорошему надо было начать новую тему

А теперь о главном:
Каждому символу соответствует свой код, поэтому можно обойтись и с одним массивом, в ячейки которого будем записывать кол-во вхожений определенной буквы, а индекс записываемой ячейки будем определять по коду буквы.
Резултат можно вывести в компоненте TListBox, который я использую в примере:

Код

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;
for X := 1 to Length(MyArray) do
    ListBox1.Items.Add('Буква ' + Char((X-1) + 192) + ' встречается в тексте ' + IntToStr(MyArray[X-1]) + ' раз');
end;


PS диапозон [192..223] - коды заглавных букв русского алфавита
     ,а диапозон [224..255] - коды прописных букв русского алфавита
--------------------
"Кто бы ты ни был - не думай о себе слишком"Дельфин
PM   Вверх
alf138
Дата 27.11.2009, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 15.11.2009

Репутация: нет
Всего: нет



Перекопал интернет на предмет подключение новой формы, нужно что бы при запуске программы выскакива окно настройки 
Код

procedure Button1Click(Sender: TObject);
begin
  ClientSocket1.Host := Edit1.Text;   // Присваиваем свойствам Host и Port нужные значения
  ClientSocket1.Port := StrToInt(Edit2.Text); //  Пытаемся открыть сокет и установить соединение
  ClientSocket1.Open;
end;

Если нужно создать новую тему подскажите куда. 
P.S. Вот думаю насчет корректности, но нужно чтобы при запуске выскакивало окно ip адреса и желательно порта подключения. Насчет алфавита 
Код

ListBox1.Clear;
  for X := 1 to Length(MyArray) do
  for i := 0 to ServerSocket1.Socket.ActiveConnections - 1 do
 ServerSocket1.Socket.Connections[i].SendText('Áóêâà ' + Char((X-1) + 192) + ' âñòðå÷àåòñÿ â òåêñòå ' + IntToStr(MyArray[X-1]) + ' ðàç');
 end;

Но по приходу на клиента получается все в строчку, думаю как разделить на столбики.

Это сообщение отредактировал(а) alf138 - 27.11.2009, 21:21
PM MAIL   Вверх
alf138
Дата 28.11.2009, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 15.11.2009

Репутация: нет
Всего: нет



Все прихотдящие сообщения пишет в одну строчку, как разделить на строчки ? 
Код
or X := 1 to Length(MyArray) do
  for i := 0 to ServerSocket1.Socket.ActiveConnections - 1 do
 ServerSocket1.Socket.Connections[i].SendText('Буква ' + Char((X-1) + 192) + ' встречается в тексте ' + IntToStr(MyArray[X-1]) + 'раз.');

Думал дописать в конце строчки запятую и разделять по строчно но как то замудренно получается 
Код

procedure TForm1.Button1Click(Sender: TObject);
const DelSym = ' .,!?';
var Text,Word: string; i: integer;
begin
  Text:=Memo1.Lines.Text;
  for i := 1 to Length(Text) do
    if Pos(Text[i],DelSym) > 0 then
      Text[i]:=',';
 
  if Text[1] = ',' then
    Delete(Text,1,1);
  while Pos(',,',Text) > 0 do
    Delete(Text,Pos(',,',Text),1);
    
  repeat
    Word:=Copy(Text,1,Pos(',',Text)-1);
    Delete(Text,1,Length(Word)+1);
    ListBox1.Items.Add(Word);
  until Length(Text) = 0;
end;

PM MAIL   Вверх
Демо
Дата 28.11.2009, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



Цитата(alf138 @  28.11.2009,  20:48 Найти цитируемый пост)
Думал дописать в конце строчки запятую и разделять по строчно но как то замудренно получается 


Используй стандартный разделитель - #13#10.
Либо TListBox.Items.Delimiter и TListBox.Items.DelimitedText


--------------------
    
PM MAIL ICQ Skype   Вверх
alf138
Дата 29.11.2009, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 15.11.2009

Репутация: нет
Всего: нет



Не хочет не пойму что не так делаю 
Код

S:=Socket.ReceiveText;
ListBox1.Items.Delimited='|';
ListBox1.Items.DelimitedText(S);


Это сообщение отредактировал(а) alf138 - 29.11.2009, 09:25
PM MAIL   Вверх
Демо
Дата 29.11.2009, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



Цитата(alf138 @  29.11.2009,  09:13 Найти цитируемый пост)
Не хочет не пойму что не так делаю


В отладчике смотрел? Точно приходит нужная строка с разделителем?


--------------------
    
PM MAIL ICQ Skype   Вверх
alf138
Дата 29.11.2009, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 15.11.2009

Репутация: нет
Всего: нет



У меня на клиента уходит такая строка 
Код

ServerSocket1.Socket.Connections[i].SendText('Буква ' + Char((X-1) + 192) + ' встречается в тексте ' + IntToStr(MyArray[X-1]) + 'раз.|') 

Т.е приходит "Буква А встречается в тексте 2 раза|", и так все буквы от "а до я" но не делится. 
И вообще пишет 
"Undeclared indentifier "Delimited""

Это сообщение отредактировал(а) alf138 - 29.11.2009, 16:17
PM MAIL   Вверх
kami
Дата 29.11.2009, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 23
Всего: 72



Цитата(alf138 @  29.11.2009,  16:16 Найти цитируемый пост)
приходит "Буква А встречается в тексте 2 раза|", и так все буквы от "а до я" но не делится. 

Это хорошо, что не разбивается. А то может и приходить сперва "Буква А встре" и потом "чается в тексте 2 раза". Это только к примеру.
Разбиение и склейку пакетов (повторюсь) в TCP никто не отменял.
Посему - нужно над TCP надстраивать свой протокол обмена, к примеру - первые 4 байта - длина сообщения, дальше - само сообщение. И на приемной стороне накапливать принятую информацию в буфер, а потом анализировать ее на предмет полностью пришедшего сообщения.
PM MAIL WWW   Вверх
amsoft
Дата 29.11.2009, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 201
Регистрация: 17.10.2009
Где: KZ, Astana

Репутация: 3
Всего: 4



alf138, 
на мой взгляд проще передовать не готовый текст "буква ... встречается ... раз",
а передовать только данный о кол-ве вхождений каждой буквы, и затем уже на конечном компе разбирать
полученную строку.

Можно сделать так:

1. Заполняешь массив MyArray (как писал выше)
2. Преобразовываешь его в строку:

Код

var
X: integer;
S: string;
...
S := '';
For X := 1 to Length(MyArray) do S := S + IntToStr(MyArray[X-1]) + Chr(9);


PS Chr(9) - знак табуляции, мы его используем для разделения значений в строке

3. Отправляешь полученную строку

При приеме данной строки на другом компе разбираешь ее:

4. Пишем небольшую функцию:

Код

function GetRecordItem(RecordString: string; PosNum: integer; Divider: string): string;
var
X,Y: integer;
S: string;
begin
S := '';
for Y := 1 to PosNum do
    begin
    X := Pos(Divider,RecordString);
    if X = 0
    then begin
         S := RecordString;
         RecordString := '';
         end
    else begin
         S := Copy(RecordString,1,X-1);
         Delete(RecordString,1,(X-1) + Length(Divider));
         end;
    end;
Result := S;
end;


PS Данная функция позволяет искать подстроку №PosNum, в строке RecordString (подстроки разделяются разделителем Divider)

5. Заполняем ListBox:

Код

var
X: integer;
S: string;
...
ListBox1.Clear;
S := ... //присваиваешь переменной значение, получаемое с удаленного компа (строка, которую мы передали)
X := 1;
while GetRecordItem(S,X,Chr(9)) <> '' do
         begin
         ListBox1.Items.Add('Буква ' + Char((X-1) + 192) + ' встречается в тексте ' + GetRecordItem(S,X,Chr(9)) + ' раз');
         Inc(X);
         end;



--------------------
"Кто бы ты ни был - не думай о себе слишком"Дельфин
PM   Вверх
alf138
Дата 30.11.2009, 08:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 15.11.2009

Репутация: нет
Всего: нет



Вот что у меня получилось, компиляция проходит но при отправке пишет 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);
Извените что не в коде, пишу с телефона.
PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1490 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.