![]() |
Rcon - Antwort
Hi,
ich hab mich schon ne Weile zu meinem Problem hier umgesehen, jedoch ohne Erfolg. Ich will mit meinem Programm Befehle an einen Spiele-Server per Rcon schicken und die Antworten des Servers dann mit meinem Programm auswerten. Ich schicke dabei die Befehle mit der IndyUdpClient-Komponente und empfange die Antworten ebenfalls damit:
Delphi-Quellcode:
Das Problem besteht darin, dass die komplette Antwort aus einem einzigen String besteht, dessen Zeilen durch Leerzeilen (ich glaube 'chr(13)') getrennt sind und ich die Antwort nur zeilenweise verarbeiten kann. Ich weis nur nicht wie ich den String zerteilen soll. Mit der Delimiter-Funktion und der Explode-Funktion aus der Code-Library hatte ich keinen Erfolg, da die erstere auch bei Leerzeichen trennt und die andere den gesamten String in den Array-Index 0 gepackt hat.
...
var Part: string; ... Form1.IdUDPClient1.Send(('ÿÿÿÿrcon ' + password + ' ' + command)); ... Part := Form1.IdUDPClient1.ReceiveString(); ... Wäre echt geil, wenn jemand eine konstruktive Idee liefern würde. |
Re: Rcon - Antwort
Könntest du uns dann vielleicht einen solchen String geben, damit wir sehen können, wie der denn aussieht. Bei undruckbaren Zeichen, könntest du dann auch vielleicht den ASCII Code angeben.
Vielleicht können wir dir dann helfen, weil wir die Kristallkugel schon vor einiger Zeit kaputt gemacht haben. |
Re: Rcon - Antwort
-PLAYER INFORMATION
slot: 1 team: ALLIES name changes: 0 -USER INFORMATION name: [BOT]Vic level: 0 (No0b) GUID: omnibot0100000000000000000000000 (USERID: 00000000) IP: localhost MAC: timestamp: 11/25/07 15:33:40 greet-text: none greet-audio: none private-ACL: none Mit dem ASCII-Code bin ich mir eben nicht sicher. Ich weis nicht genau, ob die Leerzeilen dem ASCII-Code 13 entsprechen. Wenn ich mir Part mit showmessage ansehe, wird es wie oben abgebildet. |
Re: Rcon - Antwort
eine StringList mit delimitter müsste gehen...
schau mal was hier rauskommt:
Delphi-Quellcode:
Da wo 'Hallo'#13... steht kommt dein empfangener String hin.
var
List: TStringList; Antwort: String; begin List := TStringList.Create; Antwort := 'Hallo'#13'das'#13'ist'#13'ein'#13'Test'; List.DelimitedText := Antwort; showmessage(List[0]); FreeAndNil(List); end; Und wenn das immernochnicht funktioniert denn setze auf die Zeile DelimitedText := Antwort einen Breakpoint, wenn er dann dort anhält drückst du STRG + F7 und gibst bei Ausdruck: Antwort ein und drückst Enter und diesen String postest du mal hier. |
Re: Rcon - Antwort
Wir hatten vor einiger Zeit schon mal ein Thema über TStrings.Delimiter. In neuen Delphi-Versionen gibt es die Eigenschaft StrictDelimiter, wenn du die auf true setzt, sollte die Trennung funktionieren.
|
Re: Rcon - Antwort
ich glaube dei deinem Vorschlag fehlt noch die Festlegung nach welchem Zeichen der Delimiter trennen soll.
Außerdem wird mein String jetzt auch bei Leerzeichen getrennt. Er soll aber nach Zeilenumbrüchen (hab vorhin fälschlicherweise Leerzeilen geschrieben) trennen. Ab welcher Version geht das mit strictdelimiter und wie genau lege ich das fest? Einfach strictdelimiter := true? Ok Frage schon beantwortet: Erst ab Delphi 2006 und ich benutz die 2005! Gibts da irgendwie ne andere möglichkeit? |
Re: Rcon - Antwort
es würde so gehen:
Delphi-Quellcode:
ansonsten versuch mal das:
var
List: TStringList; Antwort: String; begin List := TStringList.Create; Antwort := 'Hallo das ist'#13'ein'#13'Test'; List.Delimiter := #13; List.StrictDelimiter := True; List.DelimitedText := Antwort; showmessage(List[0]); FreeAndNil(List); end;
Delphi-Quellcode:
edit: [ quote]-Tag mit [ delphi]-Tag vertauscht...
var
List: TStringList; Antwort: String; begin List := TStringList.Create; Antwort := 'Hallo das ist'#13'ein'#13'Test'; List.Text := Antwort; showmessage(List[0]); FreeAndNil(List); end; |
Re: Rcon - Antwort
Also die obere Methode geht nich, weil ich die Property StrictDelimiter nicht verwenden kann
und bei der unteren Möglichkeit wird auch nach Leerzeichen getrennt, also Wort für Wort. Ich brauche aber Zeile für Zeile. Stimmt nich: Nach der Zeiten Method kommt eine Exeption. Was soll der denn bei List.Text := Antwort; machen? |
Re: Rcon - Antwort
Zitat:
Sicher das du auch List.Text eingegeben hast und nicht List.DelimitedText? Ansonsten kannst du mit ![]() |
Re: Rcon - Antwort
Der stürzt mit dieser Meldung ab:
--------------------------- Benachrichtigung über Debugger-Exception --------------------------- Im Projekt etadwin1.exe ist eine Exception der Klasse EStringListError mit der Meldung 'Listenindex überschreitet das Maximum (2)' aufgetreten. --------------------------- Anhalten Fortsetzen Hilfe --------------------------- Ich weis nicht, was der mit MAximum will. Ich hab doch nirgendwo ein Maximum festgelegt. Fuck, bin ich blöd!! :wall: Das Maximum bezog sich auf meine Abfrage: showmessage(InputList[2]); Es gab aber nur eine Zeile, darum kam die Exeption. Jedenfalls funzt dein Lösungsansatz bestens. Hätt nicht gedacht, dass das so einfach geht. Thx an alle, die mir geholfen haben und besonders an dominikkv!!!!!!!!!!!!!!!! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz