Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 12.11.2013, 18:41
Shaft Shaft вне форума
Новичок
 
Регистрация: 15.05.2013
Сообщения: 74
Версия Delphi: 7/10.4
Репутация: 12
Вопрос Подскажите пожалуйста небольшой пример с TStringList

Здравствуйте!
Такая проблема:
Нужно разбить строку и записать ее в пять переменных
Приблизительно так:

Строка например:
192.168.1.101:27015

Например объявлены пять переменных
(octetIP1 octetIP2 octetIP3 octetIP4 Port)
и строку надо записать следующим образом что бы:
octetIP1 = 192
octetIP2 = 168
octetIP3 = 1
octetIP4 = 101
Port = 27015

Перекопал много инфы и ничего не нашел. Проблема в том что IPадрес будет всегда разный и за ранее мне не известен.

Подскажите пожалуйста как можно решить задачу?
Ответить с цитированием
  #2  
Старый 12.11.2013, 19:04
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

1) Регекспы.
2) Pos, PosEx, Copy. Ищем первую точку, копируем все до нее, делаем StrToInt, затем ищем следующую точку, и т.д.
3) В лоб:
Код:
var data:array[0..4] of integer;
...
j := 0;
for i := 0 to 4 do
    data[i] := 0;
for i := 1 to length(str) do
begin
    if (str[i] >= '0') and (str[i] <= '9')
        data[j] := data[j] * 10 + ord(str[i]) - 48;
    else if (str[i] = '.') or (str[i] = ':')
    begin
        j := j + 1;
        if (j > 4)
            break;  // или сообщение об ошибке
    end;
    else
       break; // или сообщение об ошибке
end;
Тут как побочный эффект будут также парситься например 192:168:1:101.27015.
Первые 4 элемента массива будут IP, пятый - порт.
З.Ы. Кстати, если это связано с предыдущим постом - зачем сначала все собирать в строку, а потом парсить назад в числа?
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 12.11.2013 в 19:13.
Ответить с цитированием
Этот пользователь сказал Спасибо Bargest за это полезное сообщение:
Shaft (12.11.2013)
  #3  
Старый 12.11.2013, 19:11
Shaft Shaft вне форума
Новичок
 
Регистрация: 15.05.2013
Сообщения: 74
Версия Delphi: 7/10.4
Репутация: 12
По умолчанию

Спасибо! а если не сложно можно не большой примерчик пжл?

P.S. Я создаю свой Master Server, в предыдущей теме я пытался имитировать клиент игры и отправлял запросы на Официальный Master, мне нужно было принять ответ и полностью расшифровать его, что бы я потом мог сам отправлять эти ответы в правильном виде.
Ответить с цитированием
  #4  
Старый 12.11.2013, 19:12
Shaft Shaft вне форума
Новичок
 
Регистрация: 15.05.2013
Сообщения: 74
Версия Delphi: 7/10.4
Репутация: 12
По умолчанию

Ну не то что бы совсем ничего, для моего случая не могу найти(
Спасибо! Буду пробовать
Ответить с цитированием
  #5  
Старый 12.11.2013, 19:21
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Цитата:
Сообщение от Shaft
Ну не то что бы совсем ничего, для моего случая не могу найти(
Привыкай к тому, что "для твоего случая" никогда и ничего найти не получится. Ты должен сам уметь строить необходимый алгоритм из мелких частей.
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #6  
Старый 12.11.2013, 19:33
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Цитата:
P.S. Я создаю свой Master Server, в предыдущей теме я пытался имитировать клиент игры и отправлял запросы на Официальный Master, мне нужно было принять ответ и полностью расшифровать его, что бы я потом мог сам отправлять эти ответы в правильном виде.
Я тоже делал свой мастер-сервер. Только не для valve-игр, а для другой. Но структура такая же. И я ума не приложу, зачем парсить строку. Мастер-сервер принимает сообщения вида "создан сервер тут на таком-то порту" от создаваемых серверов, в бинарном виде. Добавляет в свою таблицу IP и порт и рассылает всем клиентам по запросу этот список (что и было сделано тобой в прошлой теме).
Вот где тут парсинг строки?
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #7  
Старый 12.11.2013, 19:06
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Неужели действительно "ничего не нашёл"?
Код:
var
  ip: string;
  octetIP1, octetIP2, octetIP3, octetIP4, Port: Integer;
begin
  ip := '192.168.1.101:27015';
  octetIP1 := StrToInt(copy(ip,1,pos('.',ip)-1));
  delete(ip,1,pos('.',ip));
  octetIP2 := StrToInt(copy(ip,1,pos('.',ip)-1));
  delete(ip,1,pos('.',ip));
  octetIP3 := StrToInt(copy(ip,1,pos('.',ip)-1));
  delete(ip,1,pos('.',ip));
  octetIP4 := StrToInt(copy(ip,1,pos('.',ip)-1));
  delete(ip,1,pos('.',ip));
  Port := StrToInt(ip);
end;
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj

Последний раз редактировалось PhoeniX, 12.11.2013 в 19:12.
Ответить с цитированием
Этот пользователь сказал Спасибо PhoeniX за это полезное сообщение:
Shaft (12.11.2013)
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:26.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025