Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ув. мастера. Немогу сравнить два str значения...


Michael C ©   (2002-02-26 10:03:00) 

к примеру
133.178.33.55 и 133.178.33.254
Нужно бы проверить эти строки по всем цифрам до .33
Если совпадает то пропскаю и сравниваю след. две строки???


Григорий Ситнин   (2002-02-26 13:22:00) [1]

Есть замечательная функция LastDelemiter(). Рекомендую.


Alx2   (2002-02-26 12:16:00) [2]

посмотри StrRScan


Michael C   (2002-02-26 11:56:00) [3]

А что если выбрать из адреса последнюю запятую, все что правее убрать, и записать в пер.
Есть какая то функция забыл..


Alx2   (2002-02-26 11:30:00) [4]

В этом конкретном случае, все-таки, лучше послушать Val © (26.02.02 11:15). Из-за выигрыш в скорости.


Alx2   (2002-02-26 11:21:00) [5]

Вообще, это делается через битовые маски целочисленного представления IP номеров. На всякий случай, нарисовал преобразование IP строки в integer.
Наверняка, уже есть стандартные функции, которые это все делают. Но тут сложностей нет и для самостоятельного исполнения...

Function IpStrToInt(Const IP: String): Integer;
Function GetNextPart(Var K: Integer): Byte;
Begin
Result := 0;
While (K <= Length(IP)) And (IP[K] <> ".") Do
Begin
Result := 10 * Result + Byte(IP[K]) - Byte("0");
inc(K);
End;
If IP[K] = "." Then inc(K);
End;
Var
Bytes: Array[0..3] Of Byte Absolute Result;
Var K: Integer;
Begin
K := 1;
Bytes[3] := GetNextPart(K);
Bytes[2] := GetNextPart(K);
Bytes[1] := GetNextPart(K);
Bytes[0] := GetNextPart(K);
End;

Procedure MakeIt(IPStrs : TStringList); // Список IP строк передаем сюда
Var TestIP: Integer;
k : integer;
Begin
TestIP := IpStrToInt("133.178.33.55") Shr 8; // У Образца берем только старшие 3 байта.
for k := 0 to IPStrs.Count - do
If TestIP = (IpStrToInt(IPSTrs[k]) Shr 8) // Если совпадают три старших байта
Then
Пропустить;
End;



Val   (2002-02-26 11:15:00) [6]

если так, тогда пройдись в цикле до 2-й точки(счетчик), затем считывай символы в отдельную строку, пока не встретится точка и сравни их с "33"


Michael C   (2002-02-26 10:51:00) [7]

Я то маленькую деталь упустил, мне нужна именно 33 подсетка!
То есть если два компа этой сети то нужно пропускать, все остальные не надо пропускать


Michael C   (2002-02-26 10:46:00) [8]

Ну ведь есть то и адреса типа ххх.ХХ.ххх.хх


Val   (2002-02-26 10:23:00) [9]

if copy(IPStr1,1,6)=copy(IPStr2,1,6) then...


Michael C   (2002-02-26 10:11:00) [10]

А по проще есть варианты????


gek   (2002-02-26 10:08:00) [11]

Обрежь до последней запятой, удали оставшиеся, переведи
в цифровой и вперед с песнями


Наверх

Титульная страница Поиск, карта сайта Написать письмо