Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Vyhledavani IP ve StringListu (Delphi)

Zdravím, poradi někdo jak na to.
Mam seznam s IP adresami načteny ve TStringListu.
Teď ho potřebuji prolest for i := 0 to TS.Count-1 do
a vyhledat IP v zadanem rozsahu.
Třeba 154.23.11.1 až 154.23.11.62 a vypsat je do 1 sloupce ve StringGridu.
Jak na to.

Předmět Autor Datum
Asi by som upravil pre ucely porovnania tie adresy na nejaky standardny tvar. Napr. 154.23.11.1 bude…
palos9 06.01.2013 08:07
palos9
A kldne tam pak mohou byt i ty tecky: 154.023.011.001 nový
Jan Fiala 06.01.2013 10:09
Jan Fiala
Asi by som to riešil nejak takto: type tIPRecord = packed record case integer of 0 : (asCardinal :… nový
pme 06.01.2013 09:34
pme
Ja spiš čekal že mně jen nakopnete jak na to a ne že mi tu pme da kompletní kod. Teda diky všem a hl… poslední
Leo11 06.01.2013 11:32
Leo11

Asi by som to riešil nejak takto:

type
  tIPRecord = packed record
    case integer of
       0 : (asCardinal : cardinal);
       1 : (asByte : array [0 .. 3] of byte);
    end;

function strIPtoInt(const strIP : string) : tIPRecord;
var
  i, j, k : integer;
begin
  FillChar(result, SizeOf(result), 0);
  j := 1;
  k := 0;
  for i := 1 to Length(strIP) do
  begin
    if strIP [i] = '.' then
    begin
       result.asByte [k] := StrToInt(Copy(strIP, j, i - j));
       j := succ(i);
       inc(k);
    end;
  end;
  result.asByte[k] := StrToInt(Copy(strIP, j, MaxInt));
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  startIP, endIP, tmpIp : tIPRecord;
  i : Integer;
begin
  startIp := strIPtoInt('154.23.11.1');
  endIp := strIPToInt('154.23.11.62');
  for i := 0 to TS.Count-1 do
  begin
    tmpIP := strIPtoInt(TS[i]);
    if (tmpIP.asCardinal >= startIP.asCardinal) and (tmpIP.asCardinal <= EndIp.asCardinal) then
      StringGrid1.Cols[1].Add(TS[i]);
  end;
end;

Zpět do poradny Odpovědět na původní otázku Nahoru