Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Nach unbestimmten String suchen (https://www.delphipraxis.net/162164-nach-unbestimmten-string-suchen.html)

Paulh 10. Aug 2011 12:55

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:
<img scr="X:\XXXXXX\XXXXXXXX.jpg">
Nachher:
Code:
<img scr="http://bla.de/bla.jpg">
Problem: Ich kenne ja nicht vorher den Pfad zu der Datei :(.


Ich habe überhaupt keinen Plan.

DeddyH 10. Aug 2011 12:57

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.

Paulh 10. Aug 2011 13:05

AW: Nach unbestimmten String suchen
 
@DeddyH:

Super Idee !

Kannst du mir nur noch sagen wie ich das anwende.

DeddyH 10. Aug 2011 13:11

AW: Nach unbestimmten String suchen
 
Aus dem Hut:
Delphi-Quellcode:
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;
Es kann sein, dass die Positionen hier nicht exakt stimmen, aber das wirst Du schon herausbekommen und kannst es ggf. korrigieren.

Aphton 10. Aug 2011 13:12

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 + '">'

Paulh 10. Aug 2011 13:20

AW: Nach unbestimmten String suchen
 
Danke an euch beide ihr habt mir sehr geholfen.

Den Alten Pfad bekomme ich über Copy oder ? :gruebel:

DeddyH 10. Aug 2011 13:23

AW: Nach unbestimmten String suchen
 
Klar, einfach vor dem Delete auslesen, danach isser ja weg *g*.

Paulh 10. Aug 2011 13:24

AW: Nach unbestimmten String suchen
 
Gut !

himitsu 10. Aug 2011 13:40

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.

Paulh 11. Aug 2011 09:34

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

DeddyH 11. Aug 2011 09:36

AW: Nach unbestimmten String suchen
 
Für PosEx musst Du StrUtils einbinden.

mkinzler 11. Aug 2011 09:40

AW: Nach unbestimmten String suchen
 
Was bedeutet PosEx() geht nicht?

Paulh 11. Aug 2011 09:43

AW: Nach unbestimmten String suchen
 
@ mkinzler
Undefinierter Bezeichner

@ DeddyH
Danke !

DeddyH 11. Aug 2011 09:48

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 HelpBooster (ich wüsste gar nicht, wie man ohne das Ding auskommen soll), damit geht das richtig flott.

mkinzler 11. Aug 2011 09:49

AW: Nach unbestimmten String suchen
 
Hast du StrUtils eingebunden?

DeddyH 11. Aug 2011 10:01

AW: Nach unbestimmten String suchen
 
Markus, hattest Du heute noch keinen Kaffee :zwinker:? Schon das 2. Mal heute, dass Du Posts überliest (diesmal #11).

mkinzler 11. Aug 2011 10:26

AW: Nach unbestimmten String suchen
 
Er scheint deine Beiträge auch nicht zu Lesen!

DeddyH 11. Aug 2011 10:30

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.

Jumpy 11. Aug 2011 10:51

AW: Nach unbestimmten String suchen
 
Warum geht denn PosEx nicht? StrUtils schon eingebunden?

DeddyH 11. Aug 2011 10:54

AW: Nach unbestimmten String suchen
 
:lol: 3 mal hält besser.

himitsu 11. Aug 2011 12:53

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)

Paulh 11. Aug 2011 12:55

AW: Nach unbestimmten String suchen
 
Danke :mrgreen: :mrgreen:

DeddyH 11. Aug 2011 13:00

AW: Nach unbestimmten String suchen
 
Hab ich da eine Frage verpasst? Irgendwie passen die beiden vorherigen Posts nicht in den Zusammenhang :gruebel:

himitsu 11. Aug 2011 13:00

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)

Jumpy 11. Aug 2011 13:11

AW: Nach unbestimmten String suchen
 
Zitat:

Zitat von DeddyH (Beitrag 1116192)
:lol: 3 mal hält besser.

:oops: Ähhm, ich hab auf #10 geantwortet, ohne zu sehen, dass es für den Thread schon eine zweite Seite gab. Aber zumindest hab ich die selbe Idee gehabt, wie die meisten von euch.:-D

Paulh 13. Aug 2011 09:48

AW: Nach unbestimmten String suchen
 
Ich check das nicht...

Edit1.text=HTML Datei.
Delphi Code:
Delphi-Quellcode:
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;
HTML Datei:
Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
 <title>Leer.php</title>
</head>
<body>
&nbsp;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>
Anfang ist IMMER = 0

Sagt mir bin ich zu doof ?

himitsu 13. Aug 2011 11:35

AW: Nach unbestimmten String suchen
 
Zitat:

Delphi-Quellcode:
PosEx('src="', s, 0);

Eine 0? Strings fangen bei 1 an.

Und hast du mal im Debugger nachgesehn, ob auch wirklich das Richtige in s drinsteht?


Zitat:

Delphi-Quellcode:
if checkbox1.Checked=true then

=true ... Sowas macht man nicht! ( wo ist der Aufdiepfotenhauensmilie? )

Delphi-Quellcode:
if checkbox1.Checked then
(die Gründe wurden schon oft genug, in unzähligen Threads erklärt)

Zitat:

Delphi-Quellcode:
except
  showmessage('Datei konnte nicht geladen werden.'#10#13+'Pfad richtig ?');
end;

Pfad richtig ? ... Woher soll man das wissen, wenn du doch die "eigentliche" Fehlermeldung zerstört hast?
Eventuell fehlten auch nur die Zugriffsrechte?

Delphi-Quellcode:
except
  on E: Exception do begin
    E.Message := 'Datei konnte nicht geladen werden.' + sLineBreak + 'Pfad richtig ?' + sLineBreak + sLineBreak + E.Message;
    raise;
  end;
end;
oder laß das Try-Except einfach weg.

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:
s := memo1.Lines.Text;

Ist zwar kein Fehler, aber nimm besser
Delphi-Quellcode:
s := Memo1.Text;
, denn .Lines zerlegt den zusammenhängenden Text im Memo in einzelne Zeilen, um ihn danach über .Lines.Text gleich wieder zusammenzusetzen.
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 = Delphi-Referenz durchsuchensLineBreak (unter Windows)

Paulh 13. Aug 2011 12:46

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