AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi IRC String durch for Schleife erweitern
Thema durchsuchen
Ansicht
Themen-Optionen

IRC String durch for Schleife erweitern

Ein Thema von RedShakal · begonnen am 26. Jul 2009 · letzter Beitrag vom 11. Aug 2009
Antwort Antwort
RedShakal
(Gast)

n/a Beiträge
 
#1

IRC String durch for Schleife erweitern

  Alt 26. Jul 2009, 14:48
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] = 'Maplistthen
    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.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.580 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: TCP String durch for Schleife erweitern

  Alt 26. Jul 2009, 14:55
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
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
RedShakal
(Gast)

n/a Beiträge
 
#3

Re: IRC String durch for Schleife erweitern

  Alt 26. Jul 2009, 15:11
Vielen Dank so funktioniert es

Ich habs jetzt so gemacht

Delphi-Quellcode:
  if StrArr[0] = 'Maplistthen
    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;
  Mit Zitat antworten Zitat
IceBube

Registriert seit: 9. Jul 2008
178 Beiträge
 
#4

Re: IRC String durch for Schleife erweitern

  Alt 26. Jul 2009, 15:45
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
  Mit Zitat antworten Zitat
RedShakal
(Gast)

n/a Beiträge
 
#5

Re: IRC String durch for Schleife erweitern

  Alt 11. Aug 2009, 22:54
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:30 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