Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi IRC String durch for Schleife erweitern (https://www.delphipraxis.net/137677-irc-string-durch-schleife-erweitern.html)

RedShakal 26. Jul 2009 13:48


IRC String durch for Schleife erweitern
 
Hallo, ich brauche mal bitte einen schnellen Denkanstoß.

Für meinen Map downloader speichere ich zurzeit die Mapliste in einer Ini datei:

Delphi-Quellcode:
[Maplist]
Anzahl=4
1=Test
2=Test
3=Test2
4=Test
Diese sollen im Programm ausgelesen werden, an einen String gehängt werden und anschließend verschickt werden.

Delphi-Quellcode:
if StrArr[0] = 'Maplist' then
    begin
       ini:=TIniFile.create(ExtractFilePath(ParamStr(0))+ 'maplist.ini');
       try
         Anzahl  := ini.ReadInteger('Maplist','Anzahl','');
           for i := 1 to Anzahl-1 do
             Maps := ini.ReadString('Maplist',i,'');
             Maps := Maps+'|';


// An dieser Stelle komme ich nicht weiter. Wie hängt man den durch I ermittelten Wert hinten an den String dran? Damit das dann z.b. in den Schema ist: Maplist|Test|Test|Test2|Test ? Diese Werden über einen IRC Befehl an die Clients verschickt und ausgewertet. ( Die Clients reagieren nur wenn der Nickname "Masterserver" und das wort mit "Maplist" anfängt.


       finally
         ini.free;
    end;

Das gleiche Problem haben die Clients dann leider auch. Ich hab mir das so vorgestellt das ich die Map anzahl direkt mitsende z.b. Maplist|4|Test|Test|Test2|Test

Die werden dann durch eine Explode funktion im Programm in die Einzelteile aufgeteilt.

Delphi-Quellcode:
      if (StrArr[0] = 'Maplist') and (AUser.Nick = 'KKND|Masterserver') then
        begin
          Anzahl                         := StrArr[1];
          for i := 1 to Anzahl-1 do
          Form6.Maplist.Items.Add.Caption := StrArr[i];
        end;
So in etwa hatte ich mir das vorgestellt, weiß aber nicht genau ob das wirklich so richtig ist.

jaenicke 26. Jul 2009 13:55

Re: TCP String durch for Schleife erweitern
 
Delphi-Quellcode:
for i := 1 to Anzahl do // nix -1 ;-)
  Maps := Maps + ini.ReadString('Maplist', IntToStr(i), '') + '|'; // IntToStr vergessen...
Delete(Maps, Length(Maps), 1); // letzten | entfernen

RedShakal 26. Jul 2009 14:11

Re: IRC String durch for Schleife erweitern
 
Vielen Dank so funktioniert es :mrgreen:

Ich habs jetzt so gemacht

Delphi-Quellcode:
  if StrArr[0] = 'Maplist' then
    begin
       ini:=TIniFile.create(ExtractFilePath(ParamStr(0))+ 'maplist.ini');
       try
         Anzahl  := ini.ReadInteger('Maplist','Anzahl',0);
           for i := 1 to Anzahl do
             Maps := Maps + ini.ReadString('Maplist', IntToStr(i), '') + '|';
             Delete(Maps, Length(Maps), 1);
          finally
            ini.free;
            Irc.Say('#kkndreloaded', 'Maplist|'+InttoStr(Anzahl)+'|'+Maps);
          end;
    end;

Client

Delphi-Quellcode:
  if (StrArr[0] = 'Maplist') and (AUser.Nick = 'KKND|Masterserver') then
    begin
      Anzahl := StrtoInt(StrArr[1]);

      for i := 2 to Anzahl+1 do
        begin
          Form6.Maplist.Items.Add.Caption := StrArr[i];
        end;
    end;

IceBube 26. Jul 2009 14:45

Re: IRC String durch for Schleife erweitern
 
Hallo!

Einfacher geht es in dem du den ganzen Text, per Irc verschickst (Beachte: Maximale Länge der Nachricht - also sollte der Text zu lang sein geht es nicht^)

So würd ich das machen:
Delphi-Quellcode:
function SendIni:Boolean;
var List : TStringList;
begin
//Ini laden
List := TstringList.Create;
List.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'maplist.ini');

//Delimiter
List.Delimiter := ',';

//Senden
irc.Say(Channel bzw. Person, '<M>' + List.DelimitedText);

//
List.Free;
end;

(*========Beim Empfangen========*)
var Msg : string;
    List : TStringList;

if Copy(aMessage,1,Pos('>',aMessage)+1) = '<M>' then
begin
 Msg := Copy(aMessage,Pos('>',aMessage)+1,Length(aMessage));
 List.Delimiter := ',';
 List.DelimitedText := Msg;
 //
 List.SaveToFile('Filename.ini');
 List.Free;
end;
So musst du nicht die ini neu schreiben^

Hoffe es funktioniert, hab es nicht getestet!

lg

RedShakal 11. Aug 2009 21:54

Re: IRC String durch for Schleife erweitern
 
Ich stehe gerade vor dem von dir genannten Problem.

Zuviele Maps zu wenig Zeichen. Wenn ich das mit dem Delimiter mache, dann wird aber jede Zeile einzeln gesendet und der Client weiß nichtmehr was wo dazu gehört. Ich könnte natürlich jeden String mit Maplist|Mapname|Author|Datum senden. Das geht in dem Sinne zwar, wirft aber Probleme beim Map update auf. Die Mapliste wird immer dann aktualisiert, wenn man die Map Datenbank Button im Form anklickt. Das bedeutet wenn ich 2x klicke, steht jede Map 2x in der Liste. Clearen kann ich das gante auch nicht, weil sonst hab ich immer nur die letzte Map


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:14 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz