![]() |
Internet to Listview
Moin, nachdem ich jetzt schon das dritte das Protokoll gewechselt habe, hab ich mir überlegt ich mach es jetzt so:
Ich lade eine Textdatei auf meinen Server hoch die die wichtigen Daten stehen dann in der Form drin: Eintrag 1 : Name | Author | Datum Eintrag 2 : Name | Author | Datum Eintrag 3 : Name | Author | Datum Wie ich auf die Datei zugreife ist mir klar -> idHttp.Get(wwww....ww..); Daten := idHttp.Body; Nun die Frage: Wie lese ich die Strings aus in einzelne Zeilen und vor allem wie mach ich dem Programm klar das es aufhören soll wenn kein Text mehr kommt ohne das es abstürzt? |
Re: Internet to Listview
Trennen kannst
-per StringListe ( Delimiter, DelimitedText) -Pos()/PosEx() -Explode ... |
Re: Internet to Listview
Ich habe das ganze jetzt nochmal auf TCPIP Basis probiert:
Der Client:
Delphi-Quellcode:
procedure TForm6.Button3Click(Sender: TObject);
var Maps : string; LI : TListItem; StrArr : TDynStringArray; begin if Form1.Client.Connected = false then begin Form1.Client.Connect(3000); end; Form1.Client.WriteLn('Maplist'); Maps := Form1.Client.ReadLn; if Length(Maps) > 0 then begin Maplist.Clear; StrArr := Explode('|', Maps); LI := Form6.Maplist.Items.Insert(0); LI.Caption := StrArr[1]; LI.SubItems.Add(StrArr[3]); LI.SubItems.Add(StrArr[2]); end; Form1.Client.Disconnect; end; Der Server:
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 := ini.ReadString('Maplist', IntToStr(i), ''); AThread.Connection.WriteLn('Maplist|'+Maps); Sleep(100); finally ini.free; end; end; Die Maplist:
Delphi-Quellcode:
Erklärung:
[Maplist]
Anzahl=4 1=area_Fayt_51|D-FENS|29.07.09 2=Die_Sanduhr|D-FENS|29.07.09 3=Krossfire|D-FENS|29.07.09 4=Iron_Mountain|D-FENS|02.08.09 5=CenterWar|veCtor|17.07.09 6=WaterPath|veCtor|21.07.09 7=Maptest|RedShakal|08.08.09 8=newm_01|-|26.07.09 9=newm_02|-|26.07.09 10=newm_03|-|26.07.09 11=newm_04|-|26.07.09 12=mlti_01|-|10.08.09 13=mlti_02|-|10.08.09 14=mlti_03|-|10.08.09 15=mlti_04|-|10.08.09 16=mlti_05|-|10.08.09 17=mlti_06|-|10.08.09 18=mlti_07|-|10.08.09 19=mlti_08|-|10.08.09 20=mlti_09|-|10.08.09 21=mlti_10|-|10.08.09 22=mlti_11|-|10.08.09 23=mlti_12|-|10.08.09 24=mlti_13|-|10.08.09 25=mlti_14|-|10.08.09 26=mlti_15|-|10.08.09 1. Client schickt Anfrage zum Server 2. Server wertet Anfrage aus 3. Server öffnet Map Datenbank ( Ini Datei ) 4. Map liest Wert "Anzahl" aus der angibt, wieviele Maps vorhanden sind 5. Server arbeitet Map 1 bis Map (Wert von Anzahl) aus Bis hierhin funktioniert alles soweit. 6. Server schickt Stringweise die Daten zum Client 7. Der Client schreibt jeden String in die Listview Wo ist das Problem? Beim Client kommt immer nur die letzte Map an. In meinem Fall steht Anzahl auf 4, daher kommt nur Iron_Mountain|D-FENS|02.08.09 in der Listview an. Ich hatte auch schon versucht die Anzahl in dem String mitzuschicken, aber das endete darin, das ich 3 Leerzeilen hatte und erst dann Map 4 auftauchte. Ich vermute es liegt daran das ich Readln öfter als 1x aufrufen muss aber leider bin ich mir nicht sicher wie ich das anstellen soll. Wie gesagt zählschleifen führen zu leerzeilen. |
Re: Internet to Listview
Hallo Patrick,
weil Du den FOR-Befehl ohne Statement-Block (BEGIN END) ausführst, wird dein WriteLn() erst dann ausgeführt, wenn alle ReadLn() ausgeführt wurden. Freundliche Grüße marabu |
Re: Internet to Listview
[OT]Hallo Achim, schön mal wieder etwas von dir zu hören (lesen)[/OT]
|
Re: Internet to Listview
Hallo, ich hab das ganze jetzt mal mit Begin und End ausprobiert. Wenn ich den Button Drücke, wird beim ersten mal "Die Sanduhr" ( Nr. 2) ausgegeben. Ist die erste und einzige Zeile. Wenn ich nochmal draufdrücke, wird "Iron Mountain" ( Nr. 4) ausgegeben.
Warum ist das so? |
Re: Internet to Listview
Lass mal das Sleep() weg
|
Re: Internet to Listview
Zitat:
Bevor ich jetzt Gehirnschmalz aufbringe, um den Code da oben im Kopf nachzuvollziehen wäre es wesentlich effizienter, wenn du deinen Code debuggen würdest. Der Debugger ist nämlich eines der besten, wenn nicht gar das Beste Werkzeug, um heruaszufinden, warum Codezeile Nr. 42 ausgeführt wird, aber Codezeile Nr. 23 nicht. Falls du dich damit nicht auskennst, sei dir dieses Tutorial empfohlen: ![]() |
Re: Internet to Listview
So ich hab jetzt ein bissel gebastelt und es funktioniert soweit. Leider macht aber die Listview jetzt Probleme
Delphi-Quellcode:
Eigentlich sollte er ja mit diesem Code jedesmal eine neue Zeile machen, aber leider schreibt er immer in die gleiche Zeile. Habe ich da irgentwas vergessen? I wird beim erstellen auf 1 gesetzt und bei jedem durchgang um 1 erhöht.
LI := Form6.Maplist.Items.Insert(i);
LI.Caption := StrArr[1]; LI.SubItems.Add(StrArr[3]); LI.SubItems.Add(StrArr[2]); i := i+1; |
Re: Internet to Listview
Versuch es mal mit
Delphi-Quellcode:
LI := Form6.Maplist.Items.Add;
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:59 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