Autor Beitrag
Real-TTX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: So 04.09.05 10:15 
Hi,

Wenn ich das Programm Starte und ein Array Element Ausgeben will in ein Edit-Feld,dann kommt .... Zugriffsverletzung ... ! Demnach nehm ich an dass Mein Array nicht so vorhanden ist , wie ich es benutze oder über haubt vorhanden ist ? Schaut euch bitte den Code mal an wenn es keine umstände macht ,


ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
type
  TPlayerlist = array of array[0..17of string;

function Convert(zahl : integer;zielsystem : Byte) : string;
const
  ziffern : array[0..15of Char =
    ('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
var
  b : Integer;
begin
  Result:='';
  b:=Zahl;
  while b > 0 do
  begin
    Result:=ziffern[b mod zielsystem]+Result;
    b:=b div zielsystem;
  end;
end;


function Get_Playerlist(Client: TIdTCPClient): TPlayerlist;
var Antwort: string;
    Ende: boolean;
    PlayerExpr: TRegExpr;
    K, I, Anzahl_Player: integer;
    Node: TTreeNode;
begin
     Ende:=false;
     Anzahl_Player:=0;
     Client.Writeln('pl');
     Antwort:=Client.Readln;
     PlayerExpr:=TRegExpr.Create;
     PlayerExpr.Expression:='^\s*p_id\s+(.*)\s+ps\s+bs\s+pr\s+br\s+pl\s+ping\s+logintime\s+idletime\s+cprivs\s+pprivs\s+pflags\s+ip\s+nick\s+loginname\s*$';
     if PlayerExpr.Exec(Antwort) then
     begin
         if (PlayerExpr.Match[1] = 'c_id'then
          begin
               repeat
                  Antwort:=CLient.Readln;
                  if Antwort = 'OK' then
                     Ende:=true
                  else
                  begin
                       setLength(Result, Anzahl_Player +1);
                       PlayerExpr.Expression:='^(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+\d+\s+\d+\s+\d+\s+\d+\s+\d+\s+"\d+\.\d+\.\d+\.\d+"\s+".+"\s+".*"\s*$';
                       if PlayerExpr.Exec(Antwort) then
                       begin
                            Result[Anzahl_Player, 1]:=PlayerExpr.Match[1];
                            Result[Anzahl_Player, 2]:=PlayerExpr.Match[2];
                            Result[Anzahl_Player, 3]:=PlayerExpr.Match[3];
                            Result[Anzahl_Player, 4]:=PlayerExpr.Match[4];
                            Result[Anzahl_Player, 5]:=PlayerExpr.Match[5];
                            Result[Anzahl_Player, 6]:=PlayerExpr.Match[6];
                            Result[Anzahl_Player, 7]:=PlayerExpr.Match[7];
                            Result[Anzahl_Player, 8]:=PlayerExpr.Match[8];
                       end;
                       PlayerExpr.Expression:='^\d+\s+\d+\s+\d+\s+\d+\s+\d+\s+\d+\s+\d+\s+\d+\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+"(\d+\.\d+\.\d+\.\d+)"\s+"(.+)"\s+"(.*)"\s*$';
                       if PlayerExpr.Exec(Antwort) then
                       begin
                            Result[Anzahl_Player, 9]:=PlayerExpr.Match[1];
                            Result[Anzahl_Player, 10]:=PlayerExpr.Match[2];
                            Result[Anzahl_Player, 11]:=Convert(strtoint(PlayerExpr.Match[3]), 2);
                            Result[Anzahl_Player, 12]:=Convert(strtoint(PlayerExpr.Match[4]), 2);
                            Result[Anzahl_Player, 13]:=Convert(strtoint(PlayerExpr.Match[5]), 2);
                            Result[Anzahl_Player, 14]:=PlayerExpr.Match[6];
                            Result[Anzahl_Player, 15]:=PlayerExpr.Match[7];
                            Result[Anzahl_Player, 16]:=PlayerExpr.Match[8];
                       end;
                       Result[Anzahl_Player, 17]:='(';
                       if (Length(Result[Anzahl_Player, 12]) >= 3AND (Copy(Result[Anzahl_Player, 12], Length(Result[Anzahl_Player, 12]) -21) = '1'then Result[Anzahl_Player, 17]:=Result[Anzahl_Player, 17]+'R' else Result[Anzahl_Player, 17]:=Result[Anzahl_Player, 17]+'U';
                       if Copy(Result[Anzahl_Player, 12], Length(Result[Anzahl_Player, 12]), 1) = '1' then Result[Anzahl_Player, 17]:=Result[Anzahl_Player, 17]+' SA';
                       if Copy(Result[Anzahl_Player, 11], Length(Result[Anzahl_Player, 11]), 1) = '1' then Result[Anzahl_Player, 17]:=Result[Anzahl_Player, 17]+' CA';
                       if (Length(Result[Anzahl_Player, 11]) >= 4AND (Copy(Result[Anzahl_Player, 11], Length(Result[Anzahl_Player, 11]) -31) = '1'then Result[Anzahl_Player, 17]:=Result[Anzahl_Player, 17]+' AO';
                       if (Length(Result[Anzahl_Player, 11]) >= 5AND (Copy(Result[Anzahl_Player, 11], Length(Result[Anzahl_Player, 11]) -41) = '1'then Result[Anzahl_Player, 17]:=Result[Anzahl_Player, 17]+' AV';
                       if (Length(Result[Anzahl_Player, 11]) >= 2AND (Copy(Result[Anzahl_Player, 11], Length(Result[Anzahl_Player, 11]) -11) = '1'then Result[Anzahl_Player, 17]:=Result[Anzahl_Player, 17]+' O';
                       if (Length(Result[Anzahl_Player, 11]) >= 3AND (Copy(Result[Anzahl_Player, 11], Length(Result[Anzahl_Player, 11]) -21) = '1'then Result[Anzahl_Player, 17]:=Result[Anzahl_Player, 17]+' V';
                       Result[Anzahl_Player, 17]:=Result[Anzahl_Player, 17]+')';
                       //Nodes sortieren
                       (*
                       for K:=0 to Anzahl_Channel -1 do
                       begin
                            if Result[Anzahl_Player, 2] = Channellist[K, 1] then
                            begin
                                for I:=0 to Viewer.Items.Count -1 do
                                begin
                                     if Viewer.Items[I].Data=Pointer(K) then
                                     begin
                                    Node:=Viewer.Items.AddChild(Viewer.Items[I], Result[Anzahl_Player, 15]+'  '+Result[Anzahl_Player, 17);
                                    Node.Data:=Pointer(Anzahl_Player);
                                    Viewer.Items[I].Expand(True);
                                end;
                              end
                            end;
                       end;
                       *)

                  end;
                  inc(Anzahl_Player);
               until (Ende) OR (Client.ReadlnTimedOut);
          end;
     end;
     PlayerExpr.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  cvar: string;
  plarray: TPlayerlist;
begin
  tcp1.Host := '62.141.42.34';
  tcp1.Port := 51234;
  tcp1.Connect(-1);
  tcp1.WriteLn('sel 8767');
  cvar := tcp1.ReadLn;
  plarray := Get_Playerlist(tcp1);
  // Edit1.Text := plarray[1,1];
end;


Benutze Komponenten : TRegExpr,IndyTCPClient,

mfg
Real-TTX

Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt.
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: So 04.09.05 23:07 
Moin!

Wie wäre es denn mal mit Testausgaben, den Code in kleinere Stücke teilen, halt das Standard-Debugging-Programm... (dazu zähle ich übrigens nicht direkt als allererstes das Delphi-Forum fragen :roll:) Dein Code ist ja jetzt nicht gerade einfach zu überblicken. :wink:

cu
Narses