Autor Beitrag
FF
Hält's aus hier
Beiträge: 13

Win XP
Delphi 7
BeitragVerfasst: Fr 30.03.07 15:36 
Hi,

ich hab ein Problem, und zwar möchte ich ein Programm schreiben,
das in bestimmten Ordnern Textdateien mit einer bestimmten Dateiendung
findet und an einer bestimmten Stelle ändert (Was an die Stelle soll,
gibt man dann in ein Edit-Feld ein...)
kann mir da jemand helfen???

Danke im Vorraus,
FF
Karlson
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 2088



BeitragVerfasst: Fr 30.03.07 15:44 
Du kannst in so alle .txt des Verzeichniss in die Stringlist FileList laden:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
var SR: TSearchRec;
    fileList : TStringList;
begin
  FileList:=TStringList.Create;
  if FindFirst(Pfad + '*.endung', faAnyFile, SR) = 0 then
  begin
   repeat
    if (SR.Attr <> faDirectory) then
     FileList.Add(SR.Name);
   until FindNext(SR) <> 0;
    FindClose(SR);
  end;
end;


Dann gehst du in einer For-Schleife alle Einträge der Stringlist FileList durch, lädst sie mit Suche in: Delphi-Forum, Delphi-Library LOADFROMFILE in eine weitere Stringlist und bearbeitest diese dann wie du es willst. Wie das bearbeiten geht kannst du hier super erklärt nachlesen.
Karlson
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 2088



BeitragVerfasst: Fr 30.03.07 16:44 
FF hat mir eine PM geschrieben in der sein Problem nochmal näher erläutert hat. Allerdings macht ein Forum keinen Sinn wenn man Lösungswege per PM bespricht:

FF hat folgendes per PM geschrieben hat folgendes geschrieben:

Also, ich hatte das eher so gedacht:
ich habe den ordner "1".
ich habe in diesem ordner eine unbekannte Anzahl von Ordnern, mit unbekannten namen.
jez soll das programm in jeden dieser ordener reingehen, und dort die datei "IRGENDWAS.toc" finden.
in dieser Datei soll es eine Einzige Zahl ändern
und zwar steht in der ersten Zeile bspw. "## Interface: 20000".
statt diesem Text sollte da aber stehen "## Interface: (""EDIT1.TEXT"")". also die Zahl, die man ins edit feld eingegeben hat.... wie ich das mache, versteh ich aus deiner antwort net so genau... aba vllt wars auch doof beschrieben


Da du eine unbekannte Ordnerstruktur hast macht das etwas schwerer. Zur Problemlösung empfehle ich folgende Unit von user profile iconmaximus: www.delphi-forum.de/...mp;highlight=mxfiles

Wenn ich dich richtig verstanden habe suchst du alle Dateien mit der Endung .toc innerhalb einer bestimmten Ordnerstruktur. Schau dir die Unit an und die Erklärung von Maximus an, damit kannst du die gesuchten Dateien recht einfach finden.

Das gewünschte Ergebnis der Suche wäre eine Stringlist, in der die eindeutigen Pfade der Dateien liegen. Z.B. "C:\1\ordnerxy\Ordnerxyz\Datei.toc" usw.

Dann musst du schaun wie du die Textdatei änderst. Wenn die ## Interface: - Stelle an immer der selben Stelle liegt ist es einfach. Wenn du z.B. weisst, dass der gesuchte String immer in Zeile 5 liegt, dann kannst du die Textdatei in eine Stringlist laden (wie gesagt: Suche in: Delphi-Forum, Delphi-Library LOADFROMFILE), die Zeile 5 z.B. so austauschen stringlist[4]:='## Interface: '+edit1.text); und die Stringlist dann mit Suche in: Delphi-Forum, Delphi-Library SAVETOFILE abspeichern.

Wenn sich die Position der ##Interface - Stelle immer ändert, musst du die Stelle mit Suche in: Delphi-Forum, Delphi-Library POS suchen. Wenn deine Datei bspw. so aussieht:

Zitat:

blablsgfsdf
blasddsdfsdf
sdfsdfsjdfsjdpf
sdfpsdjfpsdjf
##Interface "4000"


Kannst du mit

ausblenden Delphi-Quelltext
1:
2:
3:
for i:=0 to stringlist.count-1 do
 if pos('##Interface', stringlist[i])>0 then
  showmessage('##Interface befindet sich in Zeile '+inttostr(i+1));


herausfinden in welcher Zeile sich deine Direktive befindet. Und dann eben nach dem gewohnten Prinzip austauschen.

Scheinbar bist du noch recht neu, daher solltest du dich mit dem von mir geschriebenen auseinandersetzen und direkt auch noch ein paar Einsteigertuts durchmachen. Die von mir geposteten Quelltexte sind nicht Copy&Paste kompatibel. Du musst sie also verstehen, sonst bringt das hier nichts.