AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Interneteintrag in Listview auflisten
Thema durchsuchen
Ansicht
Themen-Optionen

Interneteintrag in Listview auflisten

Ein Thema von eistee · begonnen am 11. Okt 2009 · letzter Beitrag vom 13. Okt 2009
Antwort Antwort
Seite 2 von 2     12   
stiftII

Registriert seit: 2. Sep 2009
Ort: Cuxhaven
122 Beiträge
 
#11

Re: Interneteintrag in Listview auflisten

  Alt 12. Okt 2009, 03:18
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:
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?
Du könntest natürlich auch die Datenbank hacken und die Tabellen direk vom Server per sql anzapfen . Aber mit Strinfunktionen biste sicherlich besser beraten .


~stift
  Mit Zitat antworten Zitat
NickelM

Registriert seit: 22. Jul 2007
Ort: Carlsberg
445 Beiträge
 
Delphi 2009 Professional
 
#12

Re: Interneteintrag in Listview auflisten

  Alt 12. Okt 2009, 09:21
So nach einer längen Beschäftigung mit diesem Problem hab ich nun folgende Lösung gefunden:
Delphi-Quellcode:
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;
Der HTTP-Code hab ich für nene Test erweitert...ich hoffe das es deinem Schema entspricht:

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>
Nickel
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.
  Mit Zitat antworten Zitat
eistee

Registriert seit: 11. Okt 2009
9 Beiträge
 
#13

Re: Interneteintrag in Listview auflisten

  Alt 12. Okt 2009, 11:50
Danke schonmal hat mich sehr viel weitergebracht allerdings kommt bei

ListView1.Items[ZeileIndex].SubItems.Add(Eintrag); Immer dieser Fehler :

http://saved.im/mtq4nju5dhvn/error.jpg


Und dann wird er so in der Listview angezeigt :

http://saved.im/mtq4nju4dzzm/error2.jpg

Mfg
  Mit Zitat antworten Zitat
hugo1990

Registriert seit: 27. Dez 2006
166 Beiträge
 
Turbo Delphi für Win32
 
#14

Re: Interneteintrag in Listview auflisten

  Alt 12. Okt 2009, 11:58
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.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#15

Re: Interneteintrag in Listview auflisten

  Alt 12. Okt 2009, 12:28
Zitat von Luckie:
Zitat von eistee:
Das ist nicht das Problem.

Sondern das herrausschreiben aus der .php File und das richtige zu finden.
Und was hat dein Problem denn dann mit der Überschrift zu tun? Dein Problem ist doch ein ganz anderes, nämlich das extrahieren der gewünschten Informationen aus einer HTML-Seite. Das hat doch primär mit dem Listview nichts zu tun.
Hach . Ich hatte ja irgendwie die Hoffnung, dass der Threadersteller seinen Beitragstitel entsprechend anpassen würde...
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
NickelM

Registriert seit: 22. Jul 2007
Ort: Carlsberg
445 Beiträge
 
Delphi 2009 Professional
 
#16

Re: Interneteintrag in Listview auflisten

  Alt 13. Okt 2009, 01:52
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 :
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.

TIPPa 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
Nickel
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 21:19 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