Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi teilstring ändern(teil in einem html code ändern) (https://www.delphipraxis.net/64793-teilstring-aendern-teil-einem-html-code-aendern.html)

rennkuckuck 8. Mär 2006 10:48


teilstring ändern(teil in einem html code ändern)
 
hallo
ich habe so 200 *.html files.
in jedem html file sind bilder drinnen. nun hat sich der pfad geändert wo die bilder abgelegt sind.
früher war es /gif/
und jetzt ist es /gifs/
wie kann ich nun in jeder datei suchen wo ich /gif/ finde und das durch /gifs/ ersetzen.
habe schon mal angefangen aber ich weis nicht wie ich sage dass ich nur den bestimmten teil des strings meine.
hier mal mein quelltext:

Delphi-Quellcode:
 SetLength(StrA,0);      
 FileIn := '*.html';                
 StrA := '/gif/';                      
 StrA := UpperCase(StrA);
 rline:='';


 AssignFile(fr, FileIn);
 Reset(fr);              
 
 while not eof(fr) do
   begin

    readln(fr, rline);
    rline := UpperCase(rline);                          
    rline := Trim(rline);
    Found := True;                                        

    For I := 1 to (Length(StrA)-1) Do      
    Begin
      If Pos(StrA[I],rline) = 0 Then
{....wie spreche ich hier den teilstring an ....also genau das stück was ersetzt werden soll}                     
         Begin
          Found := False;                                  
          Break;                                            
         End;
     End; {For I}

   If Found then
    begin
{.....wie ersetzt man das dann}
    end;

  CloseFile(fr);

danke schonmal für antworten
ich hoffe das thema passt in das forum
gruß rennkuckuck

xaromz 8. Mär 2006 11:22

Re: teilstring ändern(teil in einem html code ändern)
 
Hallo,

schau Dir doch mal Delphi-Referenz durchsuchenStringReplace an.
Außerdem gab's neulich eine ähnliche Frage. Dabei ist das hier rausgekommen.

Gruß
xaromz

marabu 8. Mär 2006 13:21

Re: teilstring ändern(teil in einem html code ändern)
 
Herzlich willkommen in der Delphi-PRAXiS, rennkuckuck.

Du kannst immer nur eine Datei mit AssignFile zuweisen. Um wildcards aufzulösen brauchst du eine eigene Funktion:

Delphi-Quellcode:
// uses FileCtrl

function GetFiles(fileSpec: String; s: TStrings = nil): Integer;
begin
  with TFileListBox.CreateParented(HWND(-3)) do
  try
    Mask := ExtractFileName(fileSpec);
    Directory := ExtractFilePath(fileSpec);
    FileType := [ftArchive];
    Result := Items.Count;
    if Assigned(s) then
      s.Assign(Items);
  finally
    Free;
  end;
end;
Mit der kannst du dann die Dateien in einem Verzeichnis so ermitteln:

Delphi-Quellcode:
var
  s: TStrings;
  fileCount: Integer;
begin
  s: TStringList.Create;
  fileCount := GetFiles('c:\inetpub\wwwroot\demo\*.html', s);
  for i := 0 to Pred(s.Count) do
    AdjustLinks(s[i], 'gif', 'gifs');
  s.Free;
end;
Die Routine zum Anpassen der Verzeichnisstufe könnte dann so aussehen:

Delphi-Quellcode:
procedure AdjustLinks(fn: TFileName; dirOld, dirNew: String);
var
  line: String;
  s: TStrings;
  i, iPos: Integer;
begin
  s := TStringList.Create;
  s.LoadFromFile(fn);

  dirOld := '/' + Uppercase(dirOld) + '/';
  dirNew := '/' + dirNew + '/';

  for i := 0 to Pred(s.Count) do
    repeat
      iPos := Pos(dirOld, Uppercase(s[i]));
      if iPos > 0 then
      begin
        line := s[i];
        Delete(line, iPos, Length(oldDir));
        Insert(newDir, line, iPos);
        s[i] := line;
      end; // hat gefehlt...
    until iPos = 0;
  s.SaveToFile(fn);
  s.Free;
end;
Getippt und nicht getestet...

Freundliche Grüße vom marabu

rennkuckuck 8. Mär 2006 14:01

Re: teilstring ändern(teil in einem html code ändern)
 
hallo marabu
danke danke danke für deine hilfe :thumb:
habe es noch nicht ganz durchgetestet aber ich denke damit komme ich weiter.
gruß rennkuckuck

marabu 8. Mär 2006 16:00

Re: teilstring ändern(teil in einem html code ändern)
 
Ich will deine Euphorie jetzt nicht bremsen, aber du sollst wissen, dass bei deinem Ansatz jedes Vorkommen des Strings '/gif/' ausgetauscht wird - eventuell auch an Stellen, an denen das nicht gewünscht ist. Um dieses Problem in den Griff zu bekommen kann man einen Parser einsetzen, der nur das Attribut src des img tag betrachtet. Wenn du über dieses Problem stolpern solltest, dann melde dich und dir wird geholfen.

marabu

rennkuckuck 9. Mär 2006 14:53

Re: teilstring ändern(teil in einem html code ändern)
 
Hallo marabu
danke schonmal für deine antwort.
ich denke das wird kein problem dass er alles ersetzt wo /gif/ steht.
allerdings habe ich noch ein prob mit deinem quelltext.
was hast du denn in uses stehen?
weil bei mir wird jede menge in deinem quelltext rot unterstrichen? z.b. TFileListBox.CreateParented...wie wenn er es nicht kennt.
muss ich das noch irgentwie deklarieren oder so? ich kenne mich leider mit TList und TStringList nicht so gut aus....habe mich schonmal damit beschäftigt und habe es leider nicht so richtig kapiert :?
viele grüße rennkuckuck

jfheins 9. Mär 2006 15:00

Re: teilstring ändern(teil in einem html code ändern)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe da mal ein Programm gemacht, mit dem du sowas machen kannst ;)
(Nicht extra für dich ^^)

Es kann auch reguläre Ausdrücke benutzen ... (nach PCRE-Syntax)

marabu 9. Mär 2006 15:38

Re: teilstring ändern(teil in einem html code ändern)
 
Zitat:

Zitat von rennkuckuck
was hast du denn in uses stehen?

TStringList stammt aus der Unit Classes, TFileListBox aus der Unit FileCtrl.

marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:45 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