![]() |
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 |
Re: Bestimmte Bereiche aus Datei auslesen und in neue schrei
|
Re: Bestimmte Bereiche aus Datei auslesen und in neue schrei
Vielleicht sind auch reguläre Ausdrücke etwas für dich:
![]() mfG mirage228 |
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 |
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.
|
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. ;) |
Re: Bestimmte Bereiche aus Datei auslesen und in neue schrei
Zitat:
|
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:
|
Re: Bestimmte Bereiche aus Datei auslesen und in neue schrei
Es gibt hier einen
![]() |
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.
|
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. |
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:
jemand ne idee woran des liegen könnte?
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; |
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: .
|
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: |
Re: Bestimmte Bereiche aus Datei auslesen und in neue schrei
Zitat:
|
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! |
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? |
Re: Bestimmte Bereiche aus Datei auslesen und in neue schrei
Was für eine Fehlermeldung?
|
Re: Bestimmte Bereiche aus Datei auslesen und in neue schrei
Delphi-Quellcode:
Zugriffsverletzung bei Adresse 0049D42D in Modul 'Projekt.exe'. Lesen von Adresse 0000000D.
|
Re: Bestimmte Bereiche aus Datei auslesen und in neue schrei
Delphi-Quellcode:
hast du selber geschrieben oder? Wie sieht die aus?
GetFilesInDirectory
|
Re: Bestimmte Bereiche aus Datei auslesen und in neue schrei
Zitat:
@Oli.1010: Also, nimm erstmal das
Delphi-Quellcode:
aus der Schleife und setz es vor dein letztes "end;".
dateiliste.free;
inhalt.free; 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] |
Re: Bestimmte Bereiche aus Datei auslesen und in neue schrei
:roll: :roll: :roll:
Zitat:
Probier also mal das:
Delphi-Quellcode:
[edit] Ich schreibe zu langsam :mrgreen: .
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; |
Re: Bestimmte Bereiche aus Datei auslesen und in neue schrei
Zitat:
Delphi-Quellcode:
Zu finden auf
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; ![]() |
Re: Bestimmte Bereiche aus Datei auslesen und in neue schrei
Mein GetFilesInDirectory
Delphi-Quellcode:
Habe jetzt
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;
Delphi-Quellcode:
aus der Schleife herausgenommen.
dateiliste.free;
inhalt.free; 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? |
Re: Bestimmte Bereiche aus Datei auslesen und in neue schrei
jemand ne idee wie ich den spieß umdrehen könnte?
|
Re: Bestimmte Bereiche aus Datei auslesen und in neue schrei
Delphi-Quellcode:
Sollte stimmen.
inhalt.Text := Copy(inhalt.text, Pos('', inhalt.text)), Copy(inhalt.text, Pos('', inhalt.text) + Length(''));
|
Re: Bestimmte Bereiche aus Datei auslesen und in neue schrei
da bringt er jetzt leider folgende Fehlermeldung beim Kompilieren:
"Nicht genügend wirkliche Parameter" |
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(''));
|
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? |
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:
Oder etwas übersichtlicher:
inhalt.Text := Copy(inhalt.text, Pos('', inhalt.text) + Length(''), Pos('', inhalt.text) - Pos('', inhalt.text) - Length(''));
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); |
Re: Bestimmte Bereiche aus Datei auslesen und in neue schrei
hab beides ausprobiert.
jetzt bringt er eine Fehlermeldung: "E/A-Fehler 102." |
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. |
Re: Bestimmte Bereiche aus Datei auslesen und in neue schrei
ohhh....
ich habe des:
Delphi-Quellcode:
vergessen. :wall:
AssignFile(f, dateiliste[i]);
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