![]() |
Fehler bei write / writeln in eine Datei
Meine Procedure:
Delphi-Quellcode:
Die rufe ich wie folgt auf:
procedure DateiUeberschreiben(pfad: string; groesse: integer);
var i, a, zufall: integer; zeichen: string; begin for a:= 1 to 10 do begin assign(datei,pfad); rewrite(datei); for i:= 1 to groesse do begin zufall:=random(15)+1; if zufall= 1 then zeichen:='@'; if zufall= 2 then zeichen:='t'; if zufall= 3 then zeichen:='ö'; if zufall= 4 then zeichen:='+'; if zufall= 5 then zeichen:='~'; if zufall= 6 then zeichen:='*'; if zufall= 7 then zeichen:='#'; if zufall= 8 then zeichen:='w'; if zufall= 9 then zeichen:='d'; if zufall= 10 then zeichen:='b'; if zufall= 11 then zeichen:=' '; if zufall= 12 then zeichen:=']'; if zufall= 13 then zeichen:='3'; if zufall= 14 then zeichen:='|'; if zufall= 15 then zeichen:='2'; write(datei,zeichen); // Fehlermeldung [Error] Unit1.pas(58): Incompatible types: 'procedure, untyped pointer or untyped parameter' and 'String' // wenn ich das nehme: writeln(datei,zeichen); kommt das: [Error] Unit1.pas(58): Illegal type in Write/Writeln statement end; closefile(datei); end; deletefile(form1.verzeichnis.text); end;
Delphi-Quellcode:
Was mache ich falsch?
procedure TForm1.loeschenClick(Sender: TObject);
begin assignfile(datei,verzeichnis.text); reset(datei); dateiUeberschreiben(verzeichnis.text,filesize(datei)); closefile(datei); end; |
Re: Fehler bei write / writeln in eine Datei
1. write(datei,zeichen);, zeichen ist vom Typ String, musst du in PChar umwandeln.
2. assignfile(datei,verzeichnis.text);, sicher das es .text und nicht .txt heisst? |
Re: Fehler bei write / writeln in eine Datei
Verzeichnis ist vom Typ TEdit. der Pfad im Edit namens Verzeichnis stammt aus einem opendialog. :)
danke. aber wie wandel ich char in string? chartostr ... muss ich mal teten ^^ |
Re: Fehler bei write / writeln in eine Datei
Dann gib doch dem Edit nen Namen womit man den auch erkennen kann... :roll:
PChar(zeichen); |
Re: Fehler bei write / writeln in eine Datei
Zitat:
Delphi-Quellcode:
PChar('string');
|
Re: Fehler bei write / writeln in eine Datei
1.
Du brauchst deinen String nicht in einen PChar verwandeln, da write sehr wohl auch Shortstring und String akzeptiert. 2. In deiner Procedure "DateiUeberschreiben", schreibst Du "assign(datei,pfad);" Was soll das denn bringen? Wäre AssignFile(datei, Pfad) nicht zielführender? 3. In deiner Loeschen Procedure solltest Du bevor due die Ueberschreiben Procedure aufrufst, CloseFile aufrufen und die davor dir die Größe der Datei in einer Variablen speichern. |
Re: Fehler bei write / writeln in eine Datei
Hai Christopher,
mal unabhängig von deinem Problem. Was hälst Du denn von diesem Ansatz um deine ganzen IF-Then Abfragen zu verhindern?
Delphi-Quellcode:
procedure DateiUeberschreiben(pfad: string; groesse: integer);
const myChars: array[1..15] of Char = ('@', 't', 'ö', '+', '~', '*', '#', 'w', 'd', 'b', ' ', ']', '3', '|', '2'); var i, a : integer; zeichen: Char; begin for a := 1 to 10 do begin Assign(datei, pfad); rewrite(datei); for i := 1 to groesse do begin zeichen := myChars[random(15) + 1]; . . . |
Re: Fehler bei write / writeln in eine Datei
Hallo Christopher,
Delphi-Quellcode:
wahrscheinlich hast du datei mit dem Typ file deklariert.
var
datei: TextFile; Weihnachtsgrüße vom marabu |
Re: Fehler bei write / writeln in eine Datei
Zitat:
datei: file ;) Alle anderen Vorschläge nehme ich gerne an. Ich wollte ja erstmal ganz simpel versuchen, eraser (dateien komplett löschen, dass man sie nicht mehr wiederfinden kann :)) nachzuproggen. das war erstmal ein kleiner ansatz. falls ihr für mein programm ein paar ideen habt, könnt ihr ja sie gerne posten. Nich tdenken, dass das gleich in die freeware sparte kommt ^^, denn ich denke, mit meiner methode lassen sich trotzdem dateien wiederfinden. :xmas: |
Re: Fehler bei write / writeln in eine Datei
Zitat:
Marabu hat genau das richtige genannt - genauer lesen... |
Re: Fehler bei write / writeln in eine Datei
Du könntest ja auch File of byte bzw. file of char verwenden und deine Variable zeichen zu einem char machen.
Für den Hausgebrauch sollte dieses Verfahren um Dateien zu schreddern ausreichend sein, denk ich. Wirklich pyshikalisch schreddern wie in Presse oder so kann man per Prog eh nicht realisieren. |
Re: Fehler bei write / writeln in eine Datei
Delphi-Quellcode:
Jetzt meckert er wieder egen dem Charakter, dabei habe ich doch jetzt darum PChar() gesetzt.
procedure DateiUeberschreiben(pfad: string; groesse: integer);
const mychar :string = ('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!"§$%&/()=?~+,.-{}[]²³\|*'); var i, a : integer; zeichen: Char; datei: file of char; begin for a := 1 to 10 do begin Assign(datei, pfad); rewrite(datei); for i := 1 to groesse do begin zeichen := copy(PChar(mychar),random(10)+1,1); // [Error] Unit1.pas(44): Incompatible types: 'Char' and 'String' write(datei,zeichen); end; closefile(datei); end; deletefile(form1.verzeichnis.text); end; |
Re: Fehler bei write / writeln in eine Datei
Hi!
Sollte assign nicht immer noch assignFile heißen? Lass das PChar mal weg. Ciao Frederic |
Re: Fehler bei write / writeln in eine Datei
Zitat:
|
Re: Fehler bei write / writeln in eine Datei
Nein, Assign ist für andere Zwecke gedacht, Du kannst/solltest trotzdem AssignFile verwenden.
Wegen dem anderen Problem, mach aus deinem String einen ShortString, er ist ja nicht länger als 255 Zeichen und greif via [] auf die einzelnen Zeichen zu. das sollte funktionieren. |
Re: Fehler bei write / writeln in eine Datei
Ist wohl noch einnbisschen früh für mich :drunken:
Delphi-Quellcode:
procedure DateiUeberschreiben(pfad: string; groesse: integer);
const mychar :shortstring = ('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!"§$%&/()=?~+,.-{}[]²³\|*'); var i, a : integer; zeichen: Char; datei: file of char; begin for a := 1 to 10 do begin Assignfile(datei, pfad); rewrite(datei); for i := 1 to groesse do begin zeichen := copy(mychar[random(10)+1]),i,1); // not enough parameters. was mache ich denn jetzt wieder flasch :stupid: write(datei,zeichen); end; closefile(datei); end; deletefile(form1.verzeichnis.text); end; |
Re: Fehler bei write / writeln in eine Datei
HI!
Wenn ich nur Assign verwende kommt bei mir dieser Fehler: [Error] Unit1.pas(38): Incompatible types: 'TPersistent' and 'Text' Also: AssignFile verwenden Zum Char-Problem: zeichen erwartet einen Char, copy liefert einen String der Länge 1 zurück ==> nur auf erstes Zeichen zugreifen:
Delphi-Quellcode:
zeichen := copy(mychar,random(10)+1,1)[1];
Ciao Frederic |
Re: Fehler bei write / writeln in eine Datei
Fkerbers Idee ist gut,
was ich gemeint habe wäre
Delphi-Quellcode:
gewesen.
zeichen := mychar[random(10)+1];
|
Re: Fehler bei write / writeln in eine Datei
Hi!
Falls du die Idee von GuenterS aufgreifen willst, musst du nur die falsche ) an der Stelle da weglassen:
Delphi-Quellcode:
(mychar[random(10)+1]),i,1);
^^ Ciao Frederic |
Re: Fehler bei write / writeln in eine Datei
Danke, ich hab es jetzt richtig. :coder:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08: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