![]() |
Strings filtern
Hallo,
habe nur die Table Data Inhalte einer Html-Seite in einem Memo geladen. Die gekürzte Version von dem was gefiltert werden soll, sieht so aus: <B class=grey>Wartburg golf 4[/B] , EZ: 01/03, EUR 3.000 Ich möchte folgendes herausfiltern und in einer Listbox oder Memo ausgeben: Wartburg golf 4 EZ: 01/03 EUR 3.000 Diese Informationen sind nicht nur einmal im Memo, sondernn ganz unterschiedlich, manchmal 50x, 3x... Supergut wäre es auch wenn diese Daten in einer Zeile stehen könnten Wartburg golf 4 - EZ: 01/03 - EUR 3.000 Wer mag mir dabei helfen? |
Liste der Anhänge anzeigen (Anzahl: 3)
Stichwörter für die Hilfe:
pos, copy, delete, StringReplace. Im Anhang noch mal zwei Projekte. Eins extrahiert Links aus einem Text und das andere E-Mail-Adressen. Beide funkltionieren nach unterschiedlichen Prinzipien. Noch ein Tipp: Ersetz alle HTML-Tags mit StringReplace durch ein Trennzeichen zum Beispiel ";", dann fällt das Parsen einfacher. da habe ich auch noch was fällt mir ein. Das wäre meine bevorzugte Methode. |
DANKE, schau ich mir gleich an :D
|
Supergut! Danke...
eins von den dreien hätte ich nun <B class=grey>Wartburg golf 4[/B] , EZ: 01/03, EUR 3.000 also ich bekomme das jetzt herausgefiltert: Wartburg golf 4 muss ich das für alle 3 "Suchbegriffe" wiederholen, oder geht das auch in einem? Mag mir das noch jemand zeigen? Da ich die Ergebnisse schon sehr gerne in einer Listbox hätte.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i: Integer; s, s1, s2: String; begin i := 0; Listbox1.Clear; s2 := Memo1.Text; { so lange 'class=grey>' gefunden wird ist pos() > 0 } while pos('class=grey>', s2) > 0 do begin { kopieren der Zeichenfolge ab 'class=grey>' bis zum ersten Vorkommen von '"' -> Linkende } while s1 <> '<' do begin Inc(i); { immer 1 Zeichen nach s1 kopieren } s1 := copy(s2, pos('class=grey>', s2)-1+i, 1); { Überprüfen, ob s1 = ", wenn true Schleife verlassen } if s1 = '<' then break; { Zusammensetzten des Links } s := s + s1; end; { Hinzufügen des Links der in s steht in die Listbox } memo2.lines.Add(s); { Da pos() inmer nur das erste Vorkommen eines Teilstrings in einem String findet, wird der Text bis nach dem ersten Vorkommen abgeschnitten } s2 := copy(s2, pos('class=grey>', s2)+Length(s), Length(Memo1.Text)); Memo2.text := StringReplace(Memo2.text, 'class=grey>', ' ', [rfReplaceAll, rfIgnoreCase]); { Zurücksetzen der Variablen } s := ''; s1 := ''; i := 0; end; end; |
ist echt dringend, ich kriege es einfach nicht hin...
|
Na sicher mußt du das jetzt für alle drei machen. Nur könnte das für die anderen zwei etwas schwer werden, da und ja häufiger vorkommen.
|
verstehe ich, wäre aber cool gewesen wenn ich das hätte in eine funktion einbauen können, es funktioniert ja schon...ist nur tierisch langsam :(
gruss :D |
Wie groß sind denn die Dateien?
Schnelle rist auf alle Fälle der String-Parser, denn da wird einfach nur der Pointer in der Zeichenkette weitergeschoben. Allerdings geht das nur mit einem Zeichen. |
188KB
ca 2500 Zeilen ist ne Html-datei gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:38 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