![]() |
Parse Funktion?
Hallo Leute,
Ich hab ne kurze Frage, ich habe einen String(S) mit folgendem Inhalt untereinander. Zitat:
loeschen damit die Werte dahinter ueber Strings weiter gegeben werden koennen.
Delphi-Quellcode:
Kann mir da einer helfen bitte?
var
A, B, C, D, E, F: String; begin A := 'Diversen'; B := '22.17 MB'; C := 'no seeders and no leecher'; unsw... end; Ich weiss nicht ob das wichtig ist aber nochmals gesagt der Text im String steht untereinander. Schonmal Danke. |
Re: Parse Funktion?
Wenn der Aufbau immer der gleiche ist, dann so:
alles in eine StringList
Delphi-Quellcode:
var
hstr : String; list : TStringList; begin list := TStringList.Create; list.text := meintext; for i := 0 to list.count-1 do begin hstr := list[i]; Delete(hstr,1,Pos(':',hstr)+1); list[i] := hstr; end; list.Free; end; |
Re: Parse Funktion?
Hallo Lucius,
noch eine Lösung: Wenn die untereinander stehenden Zeilen so in einem string stehen:
Delphi-Quellcode:
Dann kannst du diesen String so analysieren:
const
muster = ' Category: Diversen'#13#10 + 'Size: 22.17 MB'#13#10 + ' Status: no seeders and no leecher'#13#10 + 'Speed: 0.56 kB/s'#13#10 + ' Added: 2005-10-14 22:11:15'#13#10 + 'Download : [url]http://www.hansi.org/download.php/7385/115[/url] Scripts From PopScript.com' ;
Delphi-Quellcode:
Auf das Ergebnis kannst du dann so zugreifen:
function TDemoForm.CreateStrings(s: string): TStrings;
var name, value: string; i: integer; begin Result := TStringList.Create; Result.NameValueSeparator := ':'; Result.Text := s; for i := 0 to Pred(Result.Count) do begin name := Trim(Result.Names[i]); value := Trim(Result.Values[name]); Result[i] := name + Result.NameValueSeparator + value; end; end;
Delphi-Quellcode:
Grüße vom marabu
var
s: TStrings; begin s := CreateStrings(muster); ShowMessage(s.Values['Category']); s.Free; end; |
Re: Parse Funktion?
man lernt nie aus!!!
|
Re: Parse Funktion?
Hi marabu :thumb:
Deine Funktion klapt, nun bin ich mal wieder mit meinem guten Freund Listview am basteln.
Delphi-Quellcode:
For Counter := 0 to SimpleRSS.Items.Count - 1 do
Begin z := CreateStrings(SimpleRSS.Items.Items[Counter].Description); lstbxheadlines.Items.Add(inttostr(counter) + '-' + SimpleRSS.Items.Items[Counter].Title); listitem := listview1.Items.add; // Neues Item erzeugen listitem.Caption := inttostr(counter); listitem.SubItems.add(SimpleRSS.Items.Items[Counter].Title); // Caption des Items setzen listitem.SubItems.add(z.Values['Category']); listitem.SubItems.add(z.Values['Size']); listitem.SubItems.add(z.Values['Status']); <---- ab hier fuegt er nix mehr in die Listview ....... end; z.Free; ... |
Re: Parse Funktion?
Nur am Rande: z.Free muss mit in den BEGIN END Block. Hast du genügend Spalten für deine ListView definiert? Oder werden nur Leerstrings in den letzten Spalten hinzugefügt? Schau dir mal den String an, den du in diesem Fall an CreateStrings übergibst.
marabu |
Re: Parse Funktion?
Nabend marabu,
Das mit dem z.Free war mein Fehler stimmt aber er fuegt noch immer Leerstrings ein.
Delphi-Quellcode:
Genuegend Spalten habe ich gemacht, 7 Stueck.
For Counter := 0 to SimpleRSS.Items.Count-1 do
Begin z := CreateStrings(SimpleRSS.Items.Items[Counter].Description); lstbxheadlines.Items.Add(inttostr(counter) + '-' + SimpleRSS.Items.Items[Counter].Title); listitem := listview1.Items.add; // Neues Item erzeugen listitem.Caption := inttostr(counter); listitem.SubItems.add(SimpleRSS.Items.Items[Counter].Title); // Caption des Items setzen listitem.SubItems.add(z.Values['Category']); listitem.SubItems.add(z.Values['Size']); <---- Ab hier Leersstrings z.Free; end; |
Re: Parse Funktion?
Dann prüfe doch mal, was in deinem Eingabestring steht. Füge nach dem Aufruf von CreateStrings folgendes ein:
Delphi-Quellcode:
Da müsste dann ja eine 6 ausgegeben werden, wenn ich nicht irre. Setze einen break point in CreateStrings und schau dir den string an, den du dort analysierst.
ShowMessage(IntToStr(z.Count));
marabu |
Re: Parse Funktion?
Hi marabu,
Zitat:
|
Re: Parse Funktion?
Lucius, die beiden Zeilen mit dem Trim() sind wichtig gewesen - hast du sie etwa eliminiert?
Delphi-Quellcode:
marabu
// ...
for i := 0 to Pred(Result.Count) do begin name := Trim(Result.Names[i]); value := Trim(Result.Values[name]); Result[i] := name + Result.NameValueSeparator + value; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:10 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