![]() |
Interneteintrag in Listview auflisten
Guten Tag,
ich will endlich mal wieder ein kleines Programm schreiben um wieder reinzukommen und wollte eine Methode wissen wie mann sowas ![]() In einer Listview so auflisten kann : ![]() Codeschnipsel sind erwünscht. :-) Mit freundlichen Grüßen, Eistee Edit : Hier der HTTP Code
Delphi-Quellcode:
<td>[B][Artikelname][/B]</td>
<td>[B][Preis][/B]</td> <td>[B][Verfügbarkeit][/B]</td> <td>[B][In den Korb][/B]</td> </tr> <tr> <td>Glückskeks</td> <td><center>0.2</center></td> <td><center> <div style="color: limeGreen;">Verfügbar</div> </center></td> |
Re: Interneteintrag in Listview auflisten
Eine Listview hat Items und jedes Item wiederum Subitems ;)
Code z.B. hier: ![]() |
Re: Interneteintrag in Listview auflisten
Das ist nicht das Problem.
Sondern das herrausschreiben aus der .php File und das richtige zu finden. |
Re: Interneteintrag in Listview auflisten
Achso ^^
Ich nehme mal an, das ist nicht "dein" PHP-Skript (kannst also die Ausgabe nicht beeinflussen) ? Also im einfachsten Fall kannste einfach nen XML-Parser drüberlaufen lassen und dir die Daten rauspicken. Ansonsten halt "selber parsen" mit Stringfunktionen/regulären Ausdrücken. Ist die Struktur immer gleich? |
Re: Interneteintrag in Listview auflisten
Die Struktur ist immer gleich allerdings war das jetzt nur ein Beispiel mit einem Eintrag es kann auch sein das es mehrere Seiten sind voller Einträge.
Hast du vielleicht mal einen Code Schnipsel für den XML-Parser weil damit habe ich noch nie gearbeitet. Mit freundlichen Grüßen, Eistee |
Re: Interneteintrag in Listview auflisten
Delphi-Quellcode:
Anzeigen klappt zwar aber es kann sein das der Eintrag verändert wird wie automatiesiere ich die Delete Funktion, und es kann ja sein das mehrere Einträge da sein könnten ich verzweifel noch dran :-(s := idhttp1.GET('http://test/showcat-4'); Anfang := '<td>[B][In den Korb][/B]</td>'; Ende := 'Anzeigen'; Pos0 := Pos(Anfang, s); Ergebnis := Copy(s, Pos0 + length(Anfang), 100); Pos1 := Pos(Ende, Ergebnis); Delete(Ergebnis, Pos1, 100 + length(Anfang)); Delete(Ergebnis, 1, 20); Showmessage(ergebnis); Mfg, Eistee |
Re: Interneteintrag in Listview auflisten
Delphi-Quellcode:
Damit bekomme ich jetzt
Anfang := '<td>[B][In den Korb][/B]</td>';
Ende := 'Anzeigen'; Pos0 := Pos(Anfang, s); Ergebnis := Copy(s, Pos0 + length(Anfang), 129); Pos1 := Pos(Ende, Ergebnis); Delete(Ergebnis, Pos1, 129 + length(Anfang)); ergebnis := Stringreplace(ergebnis, '<center>', '', [rfReplaceAll]); ergebnis := Stringreplace(ergebnis, '</center>', '', [rfReplaceAll]); ergebnis := Stringreplace(ergebnis, '<td>', '', [rfReplaceAll]); ergebnis := Stringreplace(ergebnis, '</td>', '', [rfReplaceAll]); ergebnis := Stringreplace(ergebnis, '<div style=', '', [rfReplaceAll]); ergebnis := Stringreplace(ergebnis, '<tr>', '', [rfReplaceAll]); ergebnis := Stringreplace(ergebnis, '</tr>', '', [rfReplaceAll]); ergebnis := Stringreplace(ergebnis, '"color: limeGreen;">', '', [rfReplaceAll]); Showmessage(ergebnis); Glückskeks 0.2 Verfügbar angezeigt wie bekomm ich es in das Listview bzw wie trenne ich die 3 Sachen? Mfg |
Re: Interneteintrag in Listview auflisten
Naja, trennen aich mit Pos, Copy und Delete (Zeilenumbruch ist #13#10) ;)
Wie man Items in ein Listview tut, habe ich ja oben schon verlinkt ;) |
Re: Interneteintrag in Listview auflisten
Naja es kann ja Morgen auch schon z.B Getränke dort stehen und was mach ich dann?
Dann muss ich alle Zahlen ändern das bringt doch nichts. Auserdem wenn es mehrere sind bringt es auch nichts... Gibt es da keine andere Methode? |
Re: Interneteintrag in Listview auflisten
Zitat:
|
Re: Interneteintrag in Listview auflisten
Du musst dich eben durch die gesamte datei hangeln um alle Einträge auszulesen ;). Wie das geht weißt du ja offenbar ( Siehe 3 posts vorher).
Zitat:
~stift |
Re: Interneteintrag in Listview auflisten
So nach einer längen Beschäftigung :coder: mit diesem Problem hab ich nun folgende Lösung gefunden:
Delphi-Quellcode:
Der HTTP-Code hab ich für nene Test erweitert...ich hoffe das es deinem Schema entspricht:
var ergebnis,s,Ende,Anfang,Eintrag : String;
Pos0,Pos1,Count,ZeileIndex : Integer; begin s := Edit1.Text; //Dein Text ist halt ein zusammenhängender String ohne Leerzeichen und Zeilenumbruch...ich hoffe dass ich das richtig verstanden hab Anfang := '<td>[B][In den Korb][/B]</td>'; Ende := '</table>'; Pos0 := Pos(Anfang, s); Pos1 := Pos(Ende, s); Ergebnis := Copy(s, Pos0 + length(Anfang), Pos1-Pos0); Ergebnis := Stringreplace(ergebnis, '<div>', '', [rfReplaceAll]); Ergebnis := Stringreplace(ergebnis, '</div>', '', [rfReplaceAll]); Ergebnis := Stringreplace(ergebnis, '<center>', '', [rfReplaceAll]); Ergebnis := Stringreplace(ergebnis, '</center>', '', [rfReplaceAll]); Ergebnis := Stringreplace(ergebnis, '<td>', '', [rfReplaceAll]); Ergebnis := Stringreplace(ergebnis, '</td>', ' ', [rfReplaceAll]); Ergebnis := Stringreplace(ergebnis, '<div style=', '', [rfReplaceAll]); Ergebnis := Stringreplace(ergebnis, '<tr>', '', [rfReplaceAll]); Ergebnis := Stringreplace(ergebnis, '</tr>', '', [rfReplaceAll]); Ergebnis := Stringreplace(ergebnis, '"color: limeGreen;">', '', [rfReplaceAll]); Ergebnis := Stringreplace(ergebnis, '</table>', '', [rfReplaceAll]); Pos0 := 1; Count := 1; ZeileIndex := 0; while Pos0 > 0 do begin Pos1 := PosEx(' ', Ergebnis,Pos0); Eintrag := Copy(Ergebnis, Pos0, Pos1-Pos0); if (Count = 1) and (Eintrag > '') then with ListView1.Items.Add do Caption := Eintrag else ListView1.Items[ZeileIndex].SubItems.Add(Eintrag); if Count = 3 then ZeileIndex := ZeileIndex + 1; if Count = 3 then Count := 1 else Count := Count + 1; Pos0 := PosEx(' ', Ergebnis ,Pos1)+1; if Pos0 = Length(Ergebnis)+1 then Pos0 := 0; end; end;
Code:
<table><td>[B][Artikelname][/B]</td><td>[B][Preis][/B]</td><td>[B][Verfügbarkeit][/B]</td><td>[B][In den Korb][/B]</td><tr><td>Glückskeks</td><td><center>0.2</center></td><td><center><div style="color: limeGreen;">Verfügbar</div></center></td></tr><tr><div><center>Gertränke<center></div></td><div><center>0.5</center></div></td><td><div style="color: limeGreen;">Verfügbar</div></td></tr></table>
|
Re: Interneteintrag in Listview auflisten
Danke schonmal hat mich sehr viel weitergebracht allerdings kommt bei
Delphi-Quellcode:
Immer dieser Fehler :
ListView1.Items[ZeileIndex].SubItems.Add(Eintrag);
![]() Und dann wird er so in der Listview angezeigt : ![]() Mfg |
Re: Interneteintrag in Listview auflisten
Ich würde dir empfehlen, für das ganze einen XML-Parser zu verwenden oder dich mal mit regulären Ausdrücken zu beschäftigen, dann brauchst du nicht solche Verränkungen mit Pos, Copy, etc. zu machen.
Zu dem Problem mit der Zugriffsverletzung: ZeilenIndex wird wohl größer sein als die Anzahl der Elemente in der ListView - 1. Notfalls einfach mal das ganze debuggen. |
Re: Interneteintrag in Listview auflisten
Zitat:
|
Re: Interneteintrag in Listview auflisten
Ja eistee,
Schön wenn ich dir weiter helfen konnte, aber ein bischen musst du selbst denken. Versuch doch mal zu verstehen wie ich das gemeint habe. Stimmt ich hätte noch Kommentare dazuschreiben sollen. Gut nun kommt die Erklärung nachträglich :mrgreen: : ZeileIndex soll den Zeilen Count-1 der Tabelle des HTTP-Codes darstellen. D.h. 0 für die erste Zeile und 1 für die 2te und so weiter. Count soll die Anzahl der Spalten im Grid darstellen, ich bin davon ausgangen das es nur 3 Spalten sind also nur bis 3 aber du hast ja 5 also musst du es auf 5 erhöhen bei der If Anweisung. Er erhöht ZeileIndex, wenn sie den angegeben Wert hat. Count wird durch jeden Aufruf der while Schleife erhöht, bis sie die Zahl erreicht und fängt dan wieder bei 1 an. Pos0 ist in diesem Fall der Anfang für Copy und Pos1 das Ende. Ich bin davon ausgangen wenn ich alle HTTP-Code Sachen wie <div> lösche das ich dan nur die Strings also Glückskeks usw bekomme. Eine Zelle im HTTP Code wird doch durch ein </td> beendet ,oder? Deshalb hab ich dort nen Leerzeichen eingefügt, damit ich sie irgendwie einzeln auslesen kann. TIPP:Da du ja die 2 letzten weglässt musst du logischer weise noch eine Anweisung schreiben, die sagt, wenn Count größter ist als 3 mach nichts ansonsten füge ein xD Vllt verstehst du ja wie du das hinbekommst. Das mit href=.... ist noch ein HTTP Code den ich nicht wusste das er noch darin existiert deshalb ging es net so. Das Prinzip von deinem angegeben Code war doch alles zulöschen um die Einträge zubekommen oder? Also mach das auch mit den restlichen xD |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:55 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