![]() |
Nach unbestimmten String suchen
Hallo DP,
Ich schon wieder..:-D Folgendes: Ich habe eine HTML Seite, die ich in ein Memo einlese (Ist ja nicht schwer :)). Jetzt möchte ich die Seite "Bearbeiten" das heißt ich möchte aus einen <img> die Quelle auslesen und ändern: Vorher:
Code:
Nachher:
<img scr="X:\XXXXXX\XXXXXXXX.jpg">
Code:
Problem: Ich kenne ja nicht vorher den Pfad zu der Datei :(.
<img scr="http://bla.de/bla.jpg">
Ich habe überhaupt keinen Plan. |
AW: Nach unbestimmten String suchen
Du kannst mit Pos/PosEx nach <img scr=" suchen und ab da nach dem nächsten ". Alles dazwischen dürfte der Pfad sein.
|
AW: Nach unbestimmten String suchen
@DeddyH:
Super Idee ! Kannst du mir nur noch sagen wie ich das anwende. |
AW: Nach unbestimmten String suchen
Aus dem Hut:
Delphi-Quellcode:
Es kann sein, dass die Positionen hier nicht exakt stimmen, aber das wirst Du schon herausbekommen und kannst es ggf. korrigieren.
s := Memo1.Lines.Text;
Anfang := PosEx('<img scr="', s, 0); while Anfang > 0 do begin Anfang := Anfang + Length('<img scr="'); Ende := PosEx('"', s, Anfang); Delete(s, Anfang, Ende - Anfang); Insert(NeuerPfad, s, Anfang); Anfang := PosEx('<img scr="', s, Ende); end; Memo1.Lines.Text := s; |
AW: Nach unbestimmten String suchen
String 1 <img scr="X:\XXXXXX\XXXXXXXX.jpg">
String 2 <img scr="http://bla.de/bla.jpg">
Code:
1. Speichere "http://bla.de/bla.jpg" in StrUrl ab
2. Ermittle per Pos() " in String 1 und speichere es ab in StrPos 3. Inkrementiere diesen Wert per inc() 4. Nun lösche ab der Stelle StrUrl alles weg per Delete() 5. StrResult = String 1 + StrUrl + '">' |
AW: Nach unbestimmten String suchen
Danke an euch beide ihr habt mir sehr geholfen.
Den Alten Pfad bekomme ich über Copy oder ? :gruebel: |
AW: Nach unbestimmten String suchen
Klar, einfach vor dem Delete auslesen, danach isser ja weg *g*.
|
AW: Nach unbestimmten String suchen
Gut !
|
AW: Nach unbestimmten String suchen
Stichwort "HTML parsen"
Wurde vor Kurzem schonmal besprochen und wenn man da schonmal drin ist, kann man sich das gewünschte suchen lassen, ändern und es wieder als String/Datei/Stream (HTML) exportieren. |
AW: Nach unbestimmten String suchen
Sorry das ich das Thema noch mal aufmachen muss aber, PosEx geht bei mir nicht. Ich habe Pos ausprobiert aber es kommt die Compiliermeldung:
"[DCC Fehler] Unit1.pas(33): E2034 Zu viele Parameter" :( PS: Ich habe Delphi 2007 |
AW: Nach unbestimmten String suchen
Für PosEx musst Du StrUtils einbinden.
|
AW: Nach unbestimmten String suchen
Was bedeutet PosEx() geht nicht?
|
AW: Nach unbestimmten String suchen
@ mkinzler
Undefinierter Bezeichner @ DeddyH Danke ! |
AW: Nach unbestimmten String suchen
Tipp: In der Delphi-Hilfe kann man bei "unbekannten Bezeichnern" in ziemlich allen Fällen die beinhaltende Unit ermitteln. Und da Du noch Delphi 2007 hast, lohnt sich die Installation von Daniels
![]() |
AW: Nach unbestimmten String suchen
Hast du StrUtils eingebunden?
|
AW: Nach unbestimmten String suchen
Markus, hattest Du heute noch keinen Kaffee :zwinker:? Schon das 2. Mal heute, dass Du Posts überliest (diesmal #11).
|
AW: Nach unbestimmten String suchen
Er scheint deine Beiträge auch nicht zu Lesen!
|
AW: Nach unbestimmten String suchen
Wieso? Ich habe StrUtils ja erst in #11 erwähnt, in #13 hat er sich bedankt. Aber ist ja auch egal, sonst werden wir noch zu sehr OT.
|
AW: Nach unbestimmten String suchen
Warum geht denn PosEx nicht? StrUtils schon eingebunden?
|
AW: Nach unbestimmten String suchen
:lol: 3 mal hält besser.
|
AW: Nach unbestimmten String suchen
Delphi 6
schau mal in die DP-CodeLib ältere Delphi kennen noch kein PosEx :stupid: (das sollte aber auch via SuFu in mehreren/ganz vielen "Wo ist PosEx"-Suchthreads schonmal beantworten worden sein) |
AW: Nach unbestimmten String suchen
Danke :mrgreen: :mrgreen:
|
AW: Nach unbestimmten String suchen
Hab ich da eine Frage verpasst? Irgendwie passen die beiden vorherigen Posts nicht in den Zusammenhang :gruebel:
|
AW: Nach unbestimmten String suchen
Er sucht immernoch PosEx, auch nach den vielen Tipps, wo und in welcher Unit "wir" PosEx bei uns finden.
Irgendwo weiter vorne stand aber mal was von Delphi 6, welches alt genug sein könnte, um PosEx noch garnicht zu kennen. @Paulh: Um sowas einfacher/schneller entdecken zu können, kann man in seinem DP-Profil die genutzte Delphi-Version angeben. [edit] ups, das "D6" war von Jumpy ... k.A. welche Version Paulh hat. [edit] hmm, er hat 2007 ... also das sollte PosEx doch schon kennen (glaub ich) |
AW: Nach unbestimmten String suchen
Zitat:
|
AW: Nach unbestimmten String suchen
Ich check das nicht...
Edit1.text=HTML Datei. Delphi Code:
Delphi-Quellcode:
HTML Datei:
var
anfang,ende:integer; s,alterpfad,neuerpfad:string; begin form3.Height:=534; try memo1.Lines.LoadFromFile(edit1.Text); except showmessage('Datei konnte nicht geladen werden.'#10#13+'Pfad richtig ?'); end; if checkbox1.Checked=true then begin s := memo1.Lines.Text; Anfang := PosEx('src="', s, 0); showmessage(inttostr(anfang)); while Anfang > 0 do begin Anfang := Anfang + Length('src="'); Ende := PosEx('"', s, Anfang); alterpfad:=copy(s,anfang,ende-anfang); Delete(s, Anfang, Ende - Anfang); Insert(NeuerPfad, s, Anfang); Anfang := PosEx('src="', s, Ende); end; Memo1.Lines.Text := s; showmessage(alterpfad); end; end;
Code:
Anfang ist IMMER = 0
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html> <head> <title>Leer.php</title> </head> <body> Hier kann Ihr Text mir Formatirung rein.<br> <br> <img style="width: 800px; height: 600px;" alt="" src="file:///C:/Dokumente%20und%20Einstellungen/All%20Users/Dokumente/Eigene%20Bilder/Beispielbilder/Sonnenuntergang.jpg"><br> </body> </html> Sagt mir bin ich zu doof ? |
AW: Nach unbestimmten String suchen
Zitat:
Und hast du mal im Debugger nachgesehn, ob auch wirklich das Richtige in s drinsteht? Zitat:
Delphi-Quellcode:
(die Gründe wurden schon oft genug, in unzähligen Threads erklärt)
if checkbox1.Checked then
Zitat:
Eventuell fehlten auch nur die Zugriffsrechte?
Delphi-Quellcode:
oder laß das Try-Except einfach weg.
except
on E: Exception do begin E.Message := 'Datei konnte nicht geladen werden.' + sLineBreak + 'Pfad richtig ?' + sLineBreak + sLineBreak + E.Message; raise; end; end; Außerdem würde der nachfolgende Code (bei dir) auch ausgeführt, selbst wenn keine Datei geladen wurde. Wenn man über Try-Except die Fehlermeldung verändert, dann nur Verständlicheres hinzufügen und maximal noch Unwichtigeswichtiges entfernen oder durch eine gleichwertige Information ersetzen. Zitat:
Delphi-Quellcode:
, denn .Lines zerlegt den zusammenhängenden Text im Memo in einzelne Zeilen, um ihn danach über .Lines.Text gleich wieder zusammenzusetzen.
s := Memo1.Text;
Memo1.Text ließt dagegen direkt aus dem Memo. Und der Windows-Zeilenumbruch nennt sich #13#10 und nicht #10#13. CR+LF = #13#10 = #$0D#$0A = ![]() |
AW: Nach unbestimmten String suchen
Immer auf die Anfänger :)
Ja, in s steht das richtige drin, das Memo wird schon vorherbefüllt. Es war die böse 0 :) Mit 1 geht es. :bounce1: Danke |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:05 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