AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Internet to Listview

Internet to Listview

Ein Thema von RedShakal · begonnen am 12. Aug 2009 · letzter Beitrag vom 15. Aug 2009
Antwort Antwort
Seite 1 von 2  1 2   
RedShakal
(Gast)

n/a Beiträge
 
#1

Internet to Listview

  Alt 12. Aug 2009, 21:23
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?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Internet to Listview

  Alt 12. Aug 2009, 21:26
Trennen kannst
-per StringListe ( Delimiter, DelimitedText)
-Pos()/PosEx()
-Explode
...
Markus Kinzler
  Mit Zitat antworten Zitat
RedShakal
(Gast)

n/a Beiträge
 
#3

Re: Internet to Listview

  Alt 15. Aug 2009, 18:41
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] = 'Maplistthen
    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:
[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
Erklärung:

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.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Internet to Listview

  Alt 15. Aug 2009, 18:55
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Internet to Listview

  Alt 15. Aug 2009, 19:31
[OT]Hallo Achim, schön mal wieder etwas von dir zu hören (lesen)[/OT]
Markus Kinzler
  Mit Zitat antworten Zitat
RedShakal
(Gast)

n/a Beiträge
 
#6

Re: Internet to Listview

  Alt 15. Aug 2009, 19:42
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?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Internet to Listview

  Alt 15. Aug 2009, 19:52
Lass mal das Sleep() weg
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#8

Re: Internet to Listview

  Alt 15. Aug 2009, 19:55
Zitat von RedShakal:
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?
Nicht böse sein, aber:

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: http://www.delphipraxis.net/internal...ct.php?t=47972
  Mit Zitat antworten Zitat
RedShakal
(Gast)

n/a Beiträge
 
#9

Re: Internet to Listview

  Alt 15. Aug 2009, 20:29
So ich hab jetzt ein bissel gebastelt und es funktioniert soweit. Leider macht aber die Listview jetzt Probleme

Delphi-Quellcode:
LI := Form6.Maplist.Items.Insert(i);
        LI.Caption := StrArr[1];
        LI.SubItems.Add(StrArr[3]);
        LI.SubItems.Add(StrArr[2]);
        i := i+1;
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.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Internet to Listview

  Alt 15. Aug 2009, 20:32
Versuch es mal mit LI := Form6.Maplist.Items.Add;
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 10:26 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