AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Parse Funktion?

Ein Thema von lucius · begonnen am 15. Nov 2005 · letzter Beitrag vom 24. Nov 2005
Antwort Antwort
Seite 1 von 2  1 2      
lucius

Registriert seit: 6. Okt 2005
Ort: Niederlande
215 Beiträge
 
Delphi 7 Enterprise
 
#1

Parse Funktion?

  Alt 15. Nov 2005, 19:12
Hallo Leute,

Ich hab ne kurze Frage, ich habe einen String(S) mit folgendem Inhalt untereinander.
Zitat:

Category: Diversen
Size: 22.17 MB
Status: no seeders and no leecher
Speed: 0.56 kB/s
Added: 2005-10-14 22:11:15
Download: http://www.hansi.org/download.php/7385/115 Scripts From PopScript.com
Jetzt moechte ich die TeilStrings(Category,(Size,(Status,(Speed, (Added,(Download
loeschen damit die Werte dahinter ueber Strings weiter gegeben werden koennen.
Delphi-Quellcode:
var
A, B, C, D, E, F: String;

begin
 A := 'Diversen';
 B := '22.17 MB';
 C := 'no seeders and no leecher';

unsw...
end;
Kann mir da einer helfen bitte?
Ich weiss nicht ob das wichtig ist aber nochmals gesagt der Text im String steht untereinander.

Schonmal Danke.
  Mit Zitat antworten Zitat
Benutzerbild von sh17
sh17

Registriert seit: 26. Okt 2005
Ort: Radebeul
1.640 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Parse Funktion?

  Alt 15. Nov 2005, 19:41
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;
Sven Harazim
--
  Mit Zitat antworten Zitat
marabu

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

Re: Parse Funktion?

  Alt 15. Nov 2005, 19:49
Hallo Lucius,

noch eine Lösung: Wenn die untereinander stehenden Zeilen so in einem string stehen:

Delphi-Quellcode:
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'
    ;
Dann kannst du diesen String so analysieren:

Delphi-Quellcode:
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;
Auf das Ergebnis kannst du dann so zugreifen:

Delphi-Quellcode:
var
  s: TStrings;
begin
  s := CreateStrings(muster);
  ShowMessage(s.Values['Category']);
  s.Free;
end;
Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von sh17
sh17

Registriert seit: 26. Okt 2005
Ort: Radebeul
1.640 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Parse Funktion?

  Alt 15. Nov 2005, 19:54
man lernt nie aus!!!
Sven Harazim
--
  Mit Zitat antworten Zitat
lucius

Registriert seit: 6. Okt 2005
Ort: Niederlande
215 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Parse Funktion?

  Alt 15. Nov 2005, 20:06
Hi marabu

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

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

Re: Parse Funktion?

  Alt 15. Nov 2005, 20:30
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
  Mit Zitat antworten Zitat
lucius

Registriert seit: 6. Okt 2005
Ort: Niederlande
215 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Parse Funktion?

  Alt 15. Nov 2005, 20:37
Nabend marabu,

Das mit dem z.Free war mein Fehler stimmt aber er fuegt noch immer Leerstrings ein.
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']); <---- Ab hier Leersstrings
        z.Free;
        end;
Genuegend Spalten habe ich gemacht, 7 Stueck.
  Mit Zitat antworten Zitat
marabu

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

Re: Parse Funktion?

  Alt 15. Nov 2005, 20:49
Dann prüfe doch mal, was in deinem Eingabestring steht. Füge nach dem Aufruf von CreateStrings folgendes ein:

ShowMessage(IntToStr(z.Count)); 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.

marabu
  Mit Zitat antworten Zitat
lucius

Registriert seit: 6. Okt 2005
Ort: Niederlande
215 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Parse Funktion?

  Alt 15. Nov 2005, 21:05
Hi marabu,

Zitat:
Da müsste dann ja eine 6 ausgegeben werden, wenn ich nicht irre.
Es wird eine 7 ausgegeben.
  Mit Zitat antworten Zitat
marabu

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

Re: Parse Funktion?

  Alt 15. Nov 2005, 21:19
Lucius, die beiden Zeilen mit dem Trim() sind wichtig gewesen - hast du sie etwa eliminiert?

Delphi-Quellcode:
// ...
  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;
marabu
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 03:11 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