Autor |
Beitrag |
adi
Hält's aus hier
Beiträge: 5
WIN XP
D7 Ent
|
Verfasst: Do 29.04.04 09:27
Guten Morgen,
ich habe dieses Forum durchforstet, aber keine Lösung gefunden. Darum die Frage:
ich möchte in einer .prt Datei (Unigraphics) [kann wie Text gehandhabt werden] Verweise ersetzen, dazu muss ich die Verweise suchen und ersetzen.
Im Inet habe ich bereits eine Lösung gefunden, sie funktioniert jedoch nur bei kleinen Dateien.
vgl:
www.swissdelphicente...showcode.php?id=1046
ich suche einen Code, der das gleiche macht, auch mit grossen (zB 10MB) Dateien.
Für Tips Trends und Antregungen danke ich im Voraus.
ich wünsche einen schönen Tag...
_________________ Gruss Adi
Semper fidelis
|
|
smiegel
      
Beiträge: 992
Erhaltene Danke: 1
WIN 7
D7 Prof., C#, RAD XE Prof.
|
Verfasst: Do 29.04.04 10:25
Hallo,
vielleicht hilft Dir das:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| procedure Ersetze(const FileName, suchen, ersetzen:String); var tin, tout:Textfile; lese, temp:String; begin temp:=ChangeFileExt(FileName, '.tmp'); AssignFile(tin, FileName); AssignFile(tout, temp); Reset(tin); Rewrite(tout); while not Eof(tin) do begin ReadLn(tin, lese); lese:=StringReplace(lese, suchen, ersetzen, [rfReplaceAll, rfIgnoreCase]); WriteLn(tout, lese); end; CloseFile(tout); CloseFile(tin); DeleteFile(FileName); RenameFile(temp, FileName); end; |
_________________ Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
|
|
adi 
Hält's aus hier
Beiträge: 5
WIN XP
D7 Ent
|
Verfasst: Do 29.04.04 11:33
Hi smiegel,
funktioniert ebenfalls nicht. Die zu ändernde Datei wird komplett zerstört, wahrscheinlich wird es nicht richtig eingelesen od so...
Manuell mit einem Hex-Editor funktionierts tip top, sobald aber Windowseditoren ins Spiel kommen klapts nicht mehr (edit usw.)
Das File muss geüffnet und bearbeitet werden, ohne eine weitere Ergänzung.
_________________ Gruss Adi
Semper fidelis
|
|
smiegel
      
Beiträge: 992
Erhaltene Danke: 1
WIN 7
D7 Prof., C#, RAD XE Prof.
|
Verfasst: Do 29.04.04 14:17
Hallo,
normalerweise funktioniert der Code für Textdateien einwandfrei.
Also kann die .prt-Datei nicht als (normale) Textdatei gehandhabt werden.
_________________ Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
|
|
adi 
Hält's aus hier
Beiträge: 5
WIN XP
D7 Ent
|
Verfasst: Fr 30.04.04 08:12
Guten Morgen,
habe ich auch rausgefunden. Beim text klappt es immer einwandfrei. (sorry für die falsche Annahme)
Besteht die Möglichkeit, dass die Variable eine sehr lange Zeile nicht aufnehmen kann? Wieviel Zeichen passen in einen String? Wenn ich den Code ohne replace
laufen lasse, übernimmt er die ersten ca. 30 Zeichen und dann ist Schluss.
Ich müsste die Datei zeichenweise Auslesen, und nicht unbedingt als Text (es darf nicht konvertiert werden).
Trotzdem besten Dank für Deine Hilfe
_________________ Gruss Adi
Semper fidelis
|
|
smiegel
      
Beiträge: 992
Erhaltene Danke: 1
WIN 7
D7 Prof., C#, RAD XE Prof.
|
Verfasst: Fr 30.04.04 08:17
Hallo,
ein String kann theoretisch 2 GByte groß werden. Daran kann es also nicht liegen.
Ich vermute einmal, in der .prt-Datei sind ASCII-Codes kleiner 32 enthalten. Diese werden als Steuerzeichen interpretiert wie z.B. #8 oder #0 usw...
_________________ Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
|
|
adi 
Hält's aus hier
Beiträge: 5
WIN XP
D7 Ent
|
Verfasst: Fr 30.04.04 09:17
Hallo,
danke für die Info. Ich habe die Datei auf den ftp geladen:
Dateiname: A-assembly-1.prt
ftp-link wurde gelöscht...
ich denke, das mit dem ASCII unter 32 ist das Problem.
Gibt es in Delphi eine Möglichkeit, eine Datei im Hex-Format zu editieren, sie muss alle Zeichen erfassen?
Habe Funktionen gefunden, die eine Konvertierung zulassen, komme mit ihnen aber auch nicht weiter.
_________________ Gruss Adi
Semper fidelis
Zuletzt bearbeitet von adi am Fr 07.05.04 10:25, insgesamt 1-mal bearbeitet
|
|
adi 
Hält's aus hier
Beiträge: 5
WIN XP
D7 Ent
|
Verfasst: Fr 07.05.04 10:24
Hallo,
ich habe mein Problem folgendermassen gelöst:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56:
| procedure Ersetze(const FileName, suchen, ersetzen:string);
var fin,fout : File of char; c1,c2,c3 : Char; n,i ,Position : Integer; temp: String;
begin i:=1; temp:=ChangeFileExt(FileName, '.tmp');
AssignFile(fout,Filename); AssignFile(fin,temp); Reset(fout); Rewrite(fin); partchange.austauschparts.progress.Visible:=true; partchange.austauschparts.progress.Max := filesize(fout); try while Not Eof(fout) do begin Read(fout,c1); Position:=FilePos(fout); //Abfrage Beginn n:=1; if (c1 = suchen[i]) then begin read(fout,c2); if (c2 = suchen[i+1]) then begin read(fout,c3); if (c3 = suchen[i+2]) then begin For n:= 1 to length(suchen) do begin write(fin,ersetzen[n]); end; Position:=Position+length(suchen); seek(fout,Position-1); read(fout,c1); end; seek(fout,Position); end; seek(fout,Position); end; //Abfrage Ende
write(fin,c1); partchange.austauschparts.progress.StepIt; end; finally CloseFile(fout); CloseFile(fin); end; partchange.austauschparts.progress.Visible:=false; partchange.austauschparts.change.Enabled:=false;
DeleteFile(FileName); RenameFile(temp, FileName); end; |
_________________ Gruss Adi
Semper fidelis
|
|
|