Entwickler-Ecke
Sonstiges (Delphi) - string zwischen <title> </title>
Sauger Chris - Sa 23.12.06 12:37
Titel: string zwischen <title> </title>
moin :)
und zwar möchte ich gern einen string trennen der zwischen den oben genannten strings steht
beispiel:
<title>Morgen ist so ein wunder schöner tag</title>
die länge von dem string zwischen <title> </title> variiert und das ist mein problem.
ps.
hab im forum gesucht aber hat mir nicht weiter geholfen
danke für eure hilfe und ein frohes fest =)
mfg sauger chris
mkinzler - Sa 23.12.06 12:43
Einfach Positionen von <title> und </title> suchen dann 1. Position + 8 bis 2. Position -1 verwenden.
Arne K. - Sa 23.12.06 12:44
Du kannst mit Hilfe der Funktion Pos() (Member von String) das erste Vorkommen eines Zeichens in einem String ermitteln.
Such nach "<title>", dann hast du die Anfangsposition-8 und such nach "</title>", dann hast du die Endposition deines Strings+1. Den kannst du dann per SubString extrahieren!
EDIT: Mist, zu langsam ...
jakobwenzel - Sa 23.12.06 12:46
SO kommste auf die Länge:
Delphi-Quelltext
1:
| l:=Pos(s,'</title>')-Pos(s,'<title>')-7; |
//EDIT: Viel zu lahm :roll:
Andreas L. - Sa 23.12.06 13:20
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| function GetTitleFromHTML(HTMLDoc: String):String; var I: Integer; Found: Boolean; html: TStringList; begin html := TStringList.create; html.loadfromfile(htmldoc); i := 0; found := false; while not found do begin if pos('<title>', html.strings[i]) > 0 then begin Result := copy(html.strings[i], pos('<title>', html.strings[i]) + 7, (pos('</title>', html.strings[i]) - pos('<title>', html.strings[i]) - 7)); Found := true; end else begin Inc(i); end; end; html.free; end;
if opendialog1.execute then showmessage(GetTitleFromHTML(opendialog1.filename)); |
Sauger Chris - Sa 23.12.06 13:45
ok danke geht nur noch ein kleines prob wie mache ich es das er mir
alle strings anzeigt
weil es sind ein paar strings zwischen <titel> </titel>
mit ner for schleife nur wie genau
:)
ansonsten danke euch allen :-)
Arne K. - Sa 23.12.06 13:47
Sauger Chris hat folgendes geschrieben: |
weil es sind ein paar strings zwischen <titel> </titel> |
Wie darf man das verstehen? Du hast mehrere <title>-Tags?
Dann handelt es sich vermutlich um XML oder etwas ähnliches.
In dem Fall: Pos() liefert dir das erste Vorkommen!
Also schneidest du einfach alles bis einschl. dem ersten Vorkommen aus deinem String heraus, nachdem du es gefunden hast. Wenn du dann wieder Pos() verwendest, kriegst du halt das nächste Vorkommen, weil das ursprünglich erste ja nicht mehr in deinem String enthalten ist. Und so weiter dann halt ...
mkinzler - Sa 23.12.06 13:47
Von Pos gibt es auch noch ne Version mit Ofset (PosEx)
GTA-Place - Sa 23.12.06 13:47
Andreas: Warum einfach, wenn es auch kompliziert geht :lol:
Delphi-Quelltext
1: 2: 3: 4:
| function GetTitle(HTML: String): String; begin Result := Copy(HTML, Pos('<title>', HTML) + 7, Pos('</title>', HTML) - Pos('<title>', HTML) - 7); end; |
Musst noch etwas mit den markierten Zahlen spielen.
Blackheart666 - Sa 23.12.06 13:48
War Quatsch, Sorry.
Sauger Chris - Sa 23.12.06 15:03
so sieht das von mir aus jetzt soll er alle strings zwischen <title> </title>
aus geben
bei den bisherigen cods gib der mir nur das erste aus das zwischen <title> </title> steht
hab aber mehr die er aus geben soll :-)
[highlight]
<item rdf:about="http://www.hompage.de/index.php?inc=2.1&id=30971">
<link>
http://www.hompage.de/index.php?inc=2.1&id=30971</link>
<title>[23.07.|12:55] die welt geht heute unter</title>
<description>die welt geht heute unter - Ratings: -/-/-</description>
</item>
<item rdf:about="http://www.hompage.de/index.php?inc=2.1&id=30971">
<link>
http://www.hompage.de/index.php?inc=2.1&id=30971</link>
<title>[23.08.|12:56] die welt geht heute unter</title>
<description>die welt geht heute unter - Ratings: -/-/-</description>
</item>
<item rdf:about="http://www.hompage.de/index.php?inc=2.1&id=30971">
<link>
http://www.hompage.de/index.php?inc=2.1&id=30971</link>
<title>[23.09.|12:57] die welt geht heute unter</title>
<description>die welt geht heute unter - Ratings: -/-/-</description>
</item>
<item rdf:about="http://www.hompage.de/index.php?inc=2.1&id=30971">
<link>
http://www.hompage.de/index.php?inc=2.1&id=30971</link>
<title>[23.10.|12:58] die welt geht heute unter</title>
<description>die welt geht heute unter - Ratings: -/-/-</description>
</item>
<item rdf:about="http://www.hompage.de/index.php?inc=2.1&id=30971">
<link>
http://www.hompage.de/index.php?inc=2.1&id=30971</link>
<title>[23.11.|12:59] die welt geht heute unter</title>
<description>die welt geht heute unter - Ratings: -/-/-</description>
</item>
<item rdf:about="http://www.hompage.de/index.php?inc=2.1&id=30971">
<link>
http://www.hompage.de/index.php?inc=2.1&id=30971</link>
<title>[23.12.|12:60] die welt geht heute unter</title>
<description>die welt geht heute unter - Ratings: -/-/-</description>
</item>
[/highlight]
Arne K. - Sa 23.12.06 15:05
Wie gesagt: Schau dir mal meinen Ansatz an, oder auch den von
mkinzler.
Allerdings finde ich meinen Ansatz eleganter. Denn dadurch, dass der String immer kleiner Wird, muss nicht immer wieder der gesamte Text durchsucht werden. Das macht die Lösung imho performanter.
Andreas L. - Sa 23.12.06 15:11
Sauger Chris hat folgendes geschrieben: |
so sieht das von mir aus jetzt soll er alle strings zwischen <title> </title>
aus geben
bei den bisherigen cods gib der mir nur das erste aus das zwischen <title> </title> steht
hab aber mehr die er aus geben soll :-)
[highlight]
<item rdf:about="http://www.hompage.de/index.php?inc=2.1&id=30971">
<link>http://www.hompage.de/index.php?inc=2.1&id=30971</link>
<title>[23.07.|12:55] die welt geht heute unter</title>
<description>die welt geht heute unter - Ratings: -/-/-</description>
</item>
<item rdf:about="http://www.hompage.de/index.php?inc=2.1&id=30971">
<link>http://www.hompage.de/index.php?inc=2.1&id=30971</link>
<title>[23.08.|12:56] die welt geht heute unter</title>
<description>die welt geht heute unter - Ratings: -/-/-</description>
</item>
<item rdf:about="http://www.hompage.de/index.php?inc=2.1&id=30971">
<link>http://www.hompage.de/index.php?inc=2.1&id=30971</link>
<title>[23.09.|12:57] die welt geht heute unter</title>
<description>die welt geht heute unter - Ratings: -/-/-</description>
</item>
<item rdf:about="http://www.hompage.de/index.php?inc=2.1&id=30971">
<link>http://www.hompage.de/index.php?inc=2.1&id=30971</link>
<title>[23.10.|12:58] die welt geht heute unter</title>
<description>die welt geht heute unter - Ratings: -/-/-</description>
</item>
<item rdf:about="http://www.hompage.de/index.php?inc=2.1&id=30971">
<link>http://www.hompage.de/index.php?inc=2.1&id=30971</link>
<title>[23.11.|12:59] die welt geht heute unter</title>
<description>die welt geht heute unter - Ratings: -/-/-</description>
</item>
<item rdf:about="http://www.hompage.de/index.php?inc=2.1&id=30971">
<link>http://www.hompage.de/index.php?inc=2.1&id=30971</link>
<title>[23.12.|12:60] die welt geht heute unter</title>
<description>die welt geht heute unter - Ratings: -/-/-</description>
</item>
[/highlight] |
Wieso nicht gleich einen vorhandenen XML-Parser bemühen? >>
XML TUTORIAL <<
Sauger Chris - Sa 23.12.06 17:42
in ner anderen sprache ist das mit den wenigen zeilen getan
Quelltext
1: 2: 3: 4: 5: 6:
| if (*<item rdf:about="*">* iswm %xrel_temp) { set %xrel_i 1 } if (%xrel_i == 1) && (*<link>*</link>* iswm %xrel_temp) { set %xrel_a $replace($gettok($gettok(%xrel_temp,2,62),1,60),&,&) } if (%xrel_i == 1) && (*<title>*</title>* iswm %xrel_temp) { set %xrel_b $gettok($gettok(%xrel_temp,2,62),1,60) } if (*</item>* iswm %xrel_temp) { unset %xrel_i | sockclose xrel if ($remove(%xrel_b,$chr(32)) != %rel) { set %rel $remove(%xrel_b,$chr(32)) | amsg 9[output]11 %xrel_b 15*14 $+(,%xrel_a,) | unset %xrel* } |
muß das doch mit delphi auch zu schaffen sein :-(
brauch nur noch n code wo alle strings zwischen <title> </title> anzeigt mehr nicht ??
der code gibt nur ein string aus der zwischen <title> </title> steht
Delphi-Quelltext
1: 2: 3: 4:
| function GetTitle(HTML: String): String; begin Result := Copy(HTML, Pos('<title>', HTML) + 7, Pos('</title>', HTML) - Pos('<title>', HTML) - 7); end; |
Moderiert von
Christian S.: Code- und Delphi-Tags eingefügt
Lannes - So 24.12.06 00:50
Hallo,
Sauger Chris hat folgendes geschrieben: |
muß das doch mit delphi auch zu schaffen sein :-( |
was hast
Du denn bisher versucht?
Kannst es mal damit versuchen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| procedure ExtractStrings(sEing: String;Tags: array of String;sAusg: TStrings); var z,i,a,x : Integer; begin x := 0; a := 0; i := 1; for z := 1 to Length(sEing) do begin if sEing[z] = Tags[x][i] then inc(i) else i := 1; if i = Length(Tags[x])+1 then if a = 0 then begin inc(x); a := z+1; end else begin dec(x); sAusg.Add(Copy(sEing,a,z-a-Length(Tags[x]))); a := 0; end; end; end; |
der Aufruf:
Delphi-Quelltext
1:
| ExtractStrings(Memo1.Text,['<title>','</title>'],Memo2.Lines); |
Sauger Chris - Sa 13.01.07 10:40
danke
ps. so einfach kans gehn :D
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!