Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Bestimmte Bereiche aus Datei auslesen und in neue schreiben (https://www.delphipraxis.net/42835-bestimmte-bereiche-aus-datei-auslesen-und-neue-schreiben.html)

Oli.1010 24. Mär 2005 13:03


Bestimmte Bereiche aus Datei auslesen und in neue schreiben
 
Hallo Leute,

ich programmiere noch nicht lange Delphi und kenne mich deshalb auch
noch nicht so gut aus.
Ich hoffe Ihr könnt mir bei folgender Sache helfen?

Ich möchte ein Programm programmieren, welches mir aus einem Verzeichnis
mit lauter *.html-Files bestimmte Bereiche aus den Files ausließt und dann
in eine neue Datei mit dem selben Namen in ein neues Verzeichnis schreibt.

z.B.:

1. Bereich innerhalb der Datei index.html

Navigation


2. Bereich innerhalb der Datei index.html

Content


Also ich will das der Inhalt zwischen den beiden Markern z.B. und
ausgelesen wird, in diesem Fall "Navigation", und in eine neue index.html in einem anderen Verzeichnis geschrieben wird.

Das soll mit jeder Datei aus dem Verzeichnis passieren.

Warum ich das ganze benötige?

Ich habe eine Website mit mehreren hundert Seite und möchte jetzt das Layout ändern aber der Inhalt sollte derselbe bleiben.

Könnte mir da jemand helfen?


Würde mich sehr freuen.



Viele Grüße

Oli

Luckie 24. Mär 2005 13:16

Re: Bestimmte Bereiche aus Datei auslesen und in neue schrei
 
Delphi-Referenz durchsuchenpos, Delphi-Referenz durchsuchencopy, Delphi-Referenz durchsuchenTStringlist.

mirage228 24. Mär 2005 13:20

Re: Bestimmte Bereiche aus Datei auslesen und in neue schrei
 
Vielleicht sind auch reguläre Ausdrücke etwas für dich:

http://www.regexpstudio.com <- TRegExpr Komponente für Delphi und Einführung in die RegEx Syntax

mfG
mirage228

Oli.1010 29. Mär 2005 10:30

Re: Bestimmte Bereiche aus Datei auslesen und in neue schrei
 
vielen Dank für eure Hilfe.

ich fang damit leider noch nichts an. :(

würd mich sehr über weitere hilfe freuen. ;)


mfg
Oli

Khabarakh 29. Mär 2005 13:18

Re: Bestimmte Bereiche aus Datei auslesen und in neue schrei
 
Hast du ein spezielles Problem oder fehlt dir der Ansatz? Mit den von Luckie genannten Funktionen ist es sicher möglich. Lade z.B. eine Datei in eine Stringlist, suche dann mit Pos nach (wohl eher begin :wink: ) und , dann mit copy alles dazwischen rauskopieren.

Oli.1010 29. Mär 2005 13:24

Re: Bestimmte Bereiche aus Datei auslesen und in neue schrei
 
ich glaube mir wär schon ganz gut geholfen, wenn mir jemand das suchen und das kopieren
als code schreiben könnte?
Den rest habe ich glaub schon irgendwie zusammengebastelt. ;)

Luckie 29. Mär 2005 13:26

Re: Bestimmte Bereiche aus Datei auslesen und in neue schrei
 
Zitat:

Zitat von Luckie

In der Delphi Hilfe sind die Beispiele, die braucht dir hier niemand zu posten.

Oli.1010 29. Mär 2005 13:32

Re: Bestimmte Bereiche aus Datei auslesen und in neue schrei
 
danke für deine hilfe! da habe ich schon nachgesehen. werde aber daraus nicht so schlau. :wall:

Khabarakh 29. Mär 2005 13:36

Re: Bestimmte Bereiche aus Datei auslesen und in neue schrei
 
Es gibt hier einen Verhaltenskodex, den solltest du dir mal anschauen. Wenn du Fragen hast, wie z.B. "Warum geht der folgende Code nicht?" oder "Was fange ich mit dem Rückgabewert von Pos an?", werden wir sie sicher beantworten, hier ist schon etwas Eigeninitiative gefragt.

Wuaegner 29. Mär 2005 13:37

Re: Bestimmte Bereiche aus Datei auslesen und in neue schrei
 
Dann musst du auch schreiben WAS genau du nicht verstehst... sonst kann man hier nur rumraten.

Luckie 29. Mär 2005 13:37

Re: Bestimmte Bereiche aus Datei auslesen und in neue schrei
 
Was macht pos?
Was kann ich mit dem was pos macht im Zusammenhang mit copy anfangen?
Wenn du das hast, warum habe ich dir als Stichwort noch TStringList gegeben? Was ist eine StringListe? Welche Methoden kennst sie? (Ganz besonders von Interesse wären wohl die zum Hinzufügen und zum Abspeichern.

Oli.1010 29. Mär 2005 14:36

Re: Bestimmte Bereiche aus Datei auslesen und in neue schrei
 
also gut hier mal mein sourcecode, kann aber nach durchlaufen des Programms keine Veränderungen an der *.html-datei einsehen.

Delphi-Quellcode:
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
f: Textfile;
dateiliste, inhalt: TStringList;
content: String;
contentend: String;

i: Integer;
begin


if ComboBox2.Text= ''
then
begin
dateiliste:=TStringList.Create;
inhalt:=TStringList.Create;
GetFilesInDirectory(folders.Path,'*.htm',dateiliste,False);
for i:=0 to dateiliste.Count-1 do
 begin
  inhalt.LoadFromFile(dateiliste[i]);
 if Pos(ComboBox1.Text, inhalt[0]) > 0 then
  inhalt.Text:=copy(inhalt.text,0,Pos('',inhalt.text)-1)+copy(inhalt.text,Pos('',inhalt.text)+21,Length(inhalt.text));
  AssignFile(f, dateiliste[i]);
Rewrite(f);
Writeln(f, '<html>');
Writeln(f, '<head>');
Writeln(f, '<title>test</title> ');
Writeln(f, '</head>');
Writeln(f, '<body>');
Writeln(f, '');
Writeln(f, ' '+inhalt.Text+' ');
Writeln(f, '');
Writeln(f, '</body>');
Writeln(f, '</html>');
closeFile(f);
dateiliste.free;
inhalt.free;
ShowMessage(' in' +ComboBox1.Text+ 'erfolgreich überarbeitet.') ;
end;
jemand ne idee woran des liegen könnte?

Khabarakh 29. Mär 2005 16:03

Re: Bestimmte Bereiche aus Datei auslesen und in neue schrei
 
Ich glaube dir nicht, dass du das kompilieren konntest :wink: . Und wenn ich annehme, dass du unten ein end; vergessen hast, glaube ich dir nicht, dass das Programm ohne Fehlermeldung läuft :zwinker: .

Oli.1010 29. Mär 2005 16:18

Re: Bestimmte Bereiche aus Datei auslesen und in neue schrei
 
oh da die habe ich vergessen hier rein zu kopieren. :o
ist ja nur ein ausschnitt aus dem quellcode.
zu kompilieren ging es. aber es machte dann halt nicht was ich möchte. :cry:

Khabarakh 29. Mär 2005 16:40

Re: Bestimmte Bereiche aus Datei auslesen und in neue schrei
 
Zitat:

Zitat von Oli.1010
oh da die habe ich vergessen hier rein zu kopieren. :o
ist ja nur ein ausschnitt aus dem quellcode.
zu kompilieren ging es. aber es machte dann halt nicht was ich möchte. :cry:

Das end steht also unten? Dann müsste es aber eine AccessViolation geben, da du die Stringlisten im ersten Schleifendurchlauf freigibst.

mytar 29. Mär 2005 16:50

Re: Bestimmte Bereiche aus Datei auslesen und in neue schrei
 
Ich denke eine Codeformatierung wäre angebracht! :-D

Eine gute Quellcodestruktur erleichtert erheblich das Verstehen!

Oli.1010 30. Mär 2005 09:51

Re: Bestimmte Bereiche aus Datei auslesen und in neue schrei
 
stimmt wenn ich dann das programm ausführe kommt eine fehlermeldung. :(
Was mach ich falsch?

Wuaegner 30. Mär 2005 09:59

Re: Bestimmte Bereiche aus Datei auslesen und in neue schrei
 
Was für eine Fehlermeldung?

Oli.1010 30. Mär 2005 10:06

Re: Bestimmte Bereiche aus Datei auslesen und in neue schrei
 
Delphi-Quellcode:
Zugriffsverletzung bei Adresse 0049D42D in Modul 'Projekt.exe'. Lesen von Adresse 0000000D.

Wuaegner 30. Mär 2005 10:11

Re: Bestimmte Bereiche aus Datei auslesen und in neue schrei
 
Delphi-Quellcode:
GetFilesInDirectory
hast du selber geschrieben oder? Wie sieht die aus?

Kernel32.DLL 30. Mär 2005 10:14

Re: Bestimmte Bereiche aus Datei auslesen und in neue schrei
 
Zitat:

Zitat von Wuaegner
Was für eine Fehlermeldung?

Wahrscheinlich eine hübsche AV, weil er, wie anfangs bereits gesagt, die TStringlists, die er hat, freigibt.

@Oli.1010:

Also, nimm erstmal das

Delphi-Quellcode:
dateiliste.free;
inhalt.free;
aus der Schleife und setz es vor dein letztes "end;".

Ich kann nicht hellsehen und weiß auch nicht, welchen Wert "inhalt.text" zur Laufzeit hat.
Delphi hat einen hübschen Debugger (wenn ich doch bloß wüsste, welche Delphi - Version du hast...). Benutze den doch einfach mal. Mich würde nämlich zu gerne interessieren, was in "inhalt.text" drinnesteht.

mfg
Daniel

[Edit 1] Narf... Das Ding hieß "inhalt.text", nicht "inhalt.txt" :wall: [/Edit 1]
[Edit 2] Huch... Die beiden Posts vor mir habe ich ja gar net gesehen... [/Edit 2]

Khabarakh 30. Mär 2005 10:31

Re: Bestimmte Bereiche aus Datei auslesen und in neue schrei
 
:roll: :roll: :roll:
Zitat:

kann aber nach durchlaufen des Programms keine Veränderungen an der *.html-datei einsehen.
Genial, der Code macht meistens nicht das, was er soll, wenn eine Exception ausgelöst wird, was uns vielleicht nicht verschwiegen werden sollte.
Probier also mal das:
Delphi-Quellcode:
for i:=0 to dateiliste.Count-1 do
begin
  inhalt.LoadFromFile(dateiliste[i]);
  if Pos(ComboBox1.Text, inhalt.Text) > 0 then //statt inhalt[0]
    inhalt.Text := copy(inhalt.text,0,Pos('',inhalt.text)-1)+copy(inhalt.text,Pos('',inhalt.text)+21,Length(inhalt.text));
  // hier verstehe ich gar nichts, "+21" ? Das sieht so aus, als ob du alles außer den begin-end Teil kopierst
  AssignFile(f, dateiliste[i]); //das und folgendes sollte wohl auch in den if-Zweig
  Rewrite(f);
  Writeln(f, '<html>');
  Writeln(f, '<head>');
  Writeln(f, '<title>test</title> ');
  Writeln(f, '</head>');
  Writeln(f, '<body>');
  Writeln(f, '');
  Writeln(f, ' '+inhalt.Text+' ');
  Writeln(f, '');
  Writeln(f, '</body>');
  Writeln(f, '</html>');
  closeFile(f);
  ShowMessage(' in' +dateiliste[i]+ 'erfolgreich überarbeitet.') ; //statt +Combobox1.Text+
  end;      //wichtig, folgendes gehört nicht mehr zur Schleife
dateiliste.free;
inhalt.free;
end;
[edit] Ich schreibe zu langsam :mrgreen: .

Kernel32.DLL 30. Mär 2005 10:45

Re: Bestimmte Bereiche aus Datei auslesen und in neue schrei
 
Zitat:

Zitat von Wuaegner
Delphi-Quellcode:
GetFilesInDirectory
hast du selber geschrieben oder? Wie sieht die aus?

So:

Delphi-Quellcode:
procedure GetFilesInDirectory(Directory: String; const Mask: String;
                              List: TStrings;
                              WithSubDirs, ClearList: Boolean);

procedure ScanDir(const Directory: String);
var
  SR: TSearchRec;
begin
  if FindFirst(Directory + Mask, faAnyFile - faDirectory, SR) = 0 then try
    repeat
      List.Add(Directory + SR.Name)
    until FindNext(SR) <> 0;
  finally
    FindClose(SR);
  end;

  if WithSubDirs then begin
    if FindFirst(Directory + '*.*', faAnyFile, SR) = 0 then try
      repeat
        if (SR.Attr = faDirectory) and
           (SR.Name <> '.') and (SR.Name <> '..') then
          ScanDir(Directory + SR.Name + '\');
      until FindNext(SR) <> 0;
    finally
      FindClose(SR);
    end;
  end;
end;

begin
  List.BeginUpdate;
  try
    if ClearList then
      List.Clear;
    if Directory = '' then Exit;
    if Directory[Length(Directory)] <> '\' then
      Directory := Directory + '\';
    ScanDir(Directory);
  finally
    List.EndUpdate;
  end;
end;
Zu finden auf
www.dsdt.info (im EDH)

Oli.1010 30. Mär 2005 14:27

Re: Bestimmte Bereiche aus Datei auslesen und in neue schrei
 
Mein GetFilesInDirectory
Delphi-Quellcode:
procedure GetFilesInDirectory(ADirectory: string; AMask: String; AList: TStrings; ARekursiv: Boolean);
var
  SR: TSearchRec;
begin
  if (ADirectory<>'') and (ADirectory[length(ADirectory)]<>'\') then
    ADirectory:=ADirectory+'\';

  if (FindFirst(ADirectory+AMask,faAnyFile-faDirectory,SR)=0) then begin
    repeat
      if (SR.Name<>'.') and (SR.Name<>'..') and (SR.Attr<>faDirectory) then
          AList.Add(ADirectory+SR.Name)
    until FindNext(SR)<>0;
    FindClose(SR);
  end;

  if ARekursiv then
    if (FindFirst(ADirectory+'*.*',faDirectory,SR)=0) then
    begin
      repeat
        if (SR.Name<>'.') and (SR.Name<>'..') then
          GetFilesInDirectory(ADirectory+SR.Name,AMask,AList,True);
      until FindNext(SR)<>0;
      FindClose(SR);
    end;
end;
Habe jetzt
Delphi-Quellcode:
dateiliste.free;
inhalt.free;
aus der Schleife herausgenommen.
Jetzt führt er Änderungen an den HTML-Dateien durch, aber wie Khabarakh schon sagte, kopiert er alles bis auf den Teil den ich eigentlich nur kopiert haben möchte. :?
Aber ich will ja nur den teil zwischen den und kopieren?

Oli.1010 30. Mär 2005 14:58

Re: Bestimmte Bereiche aus Datei auslesen und in neue schrei
 
jemand ne idee wie ich den spieß umdrehen könnte?

Khabarakh 30. Mär 2005 18:20

Re: Bestimmte Bereiche aus Datei auslesen und in neue schrei
 
Delphi-Quellcode:
inhalt.Text := Copy(inhalt.text, Pos('', inhalt.text)), Copy(inhalt.text, Pos('', inhalt.text) + Length(''));
Sollte stimmen.

Oli.1010 30. Mär 2005 19:09

Re: Bestimmte Bereiche aus Datei auslesen und in neue schrei
 
da bringt er jetzt leider folgende Fehlermeldung beim Kompilieren:
"Nicht genügend wirkliche Parameter"

Khabarakh 30. Mär 2005 20:53

Re: Bestimmte Bereiche aus Datei auslesen und in neue schrei
 
Hups.
Delphi-Quellcode:
inhalt.Text := Copy(inhalt.text, Pos('', inhalt.text), Pos('', inhalt.text) + Length(''));

Oli.1010 30. Mär 2005 21:12

Re: Bestimmte Bereiche aus Datei auslesen und in neue schrei
 
hey vielen Dank für die schnelle Hilfe. :thumb:

Jetzt wir zwar der Text der zwischen den beiden markern steht kopiert und in die anderen html-dateien übertragen, aber die 2 marker stehen dann auch noch in den neuen seiten außerdem wird der quelltext hinter auch kopiert (genau 179 zeichen).

Gibt es ne möglichkeit nur die zeichen zwischen den beiden markern und zu kopieren?

Khabarakh 30. Mär 2005 22:03

Re: Bestimmte Bereiche aus Datei auslesen und in neue schrei
 
Schon wieder hups. Copy nimmt nicht Anfang und Ende, sondern Anfang und Länge als Parameter an:
Delphi-Quellcode:
inhalt.Text := Copy(inhalt.text, Pos('', inhalt.text) + Length(''), Pos('', inhalt.text) - Pos('', inhalt.text) - Length(''));
Oder etwas übersichtlicher:
Delphi-Quellcode:
const KeyWord1 = '';
     KeyWord2 = '';
var NavigationBegin: Integer;
begin
[...]
  NavigationBegin := Pos(KeyWord1, inhalt.Text) + Length(KeyWord1);
  inhalt.Text := Copy(inhalt.Text, NavigationBegin, Pos(KeyWord2, inhalt.Text) - NavigationBegin);

Oli.1010 30. Mär 2005 22:16

Re: Bestimmte Bereiche aus Datei auslesen und in neue schrei
 
hab beides ausprobiert.
jetzt bringt er eine Fehlermeldung:

"E/A-Fehler 102."

Khabarakh 31. Mär 2005 08:27

Re: Bestimmte Bereiche aus Datei auslesen und in neue schrei
 
102 Dateivariable ist keiner Datei zugewiesen Wird von Reset, Rewrite, Append, Rename oder Erase gemeldet, wenn der Dateivariablen kein Name über einen Aufruf von Assign oder AssignFile zugewiesen wurde.
Die Online-Hilfe ist nicht umsonst da.

Oli.1010 31. Mär 2005 08:49

Re: Bestimmte Bereiche aus Datei auslesen und in neue schrei
 
ohhh....
ich habe des:
Delphi-Quellcode:
AssignFile(f, dateiliste[i]);
vergessen. :wall:

jetzt funktioniert alles. :dancer:

vielen, vielen dank! :thumb: :-D


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