Entwickler-Ecke
Dateizugriff - Delphi schreibt nicht in die Textdatei!
IronBull - Mo 23.11.09 16:37
Titel: Delphi schreibt nicht in die Textdatei!
Hallo Leute, ich habe ein Programm geschrieben in dem eine beliebig einlesebare Textdatei mit Inhalt mit dem Viginereverfahren verschluesselt wird. Das Problem liegt nun darin, dass nichts in die Datei geschrieben wird. Am Besten ist wenn ihr den Code direkt testet und über den Debugger seht was schieft läuft. Leider finde ich nichts.
Delphi-Quelltext
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: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105:
| unit vig;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TTextDatei = file of char; TForm1 = class(TForm) Button1: TButton; Edit2: TEdit; Label3: TLabel; OpenDialog1: TOpenDialog; Button2: TButton; Edit1: TEdit; Label1: TLabel; Memo1: TMemo; Memo2: TMemo; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Edit1Enter(Sender: TObject); procedure Button2Click(Sender: TObject); private public end;
var Form1: TForm1; nachricht: TTextDatei; verschluesselt:TTextDatei;
implementation
{$R *.dfm}
function viginere(text:string; key:string):string; var i,tmp:integer; resulttmp:string; begin resulttmp:=''; rewrite(verschluesselt); i:=1; while not EOF(nachricht) do begin tmp:=ord(key[1+(i-1) mod length(key)]); resulttmp:=resulttmp+char((ord(text[i])+tmp) mod 255); write(verschluesselt, resulttmp[i]); inc(i); end; close(verschluesselt); result:=resulttmp; end;
function Einlesen():string; var ch:char; begin reset(nachricht); result:=''; while not EOF(nachricht) do begin Read(nachricht, ch); result:=result + ch; end;
end;
procedure TForm1.Button2Click(Sender: TObject); begin OpenDialog1.Execute; Edit1.Text:=OpenDialog1.FileName; assignfile(nachricht, OpenDialog1.FileName); Memo1.Lines.Add(Einlesen()); end;
procedure TForm1.Edit1Enter(Sender: TObject); begin assignfile(nachricht, Edit1.Text); end;
procedure TForm1.Button1Click(Sender: TObject); begin
if Edit2.Text <> '' then begin Memo2.Lines.Add(viginere(Einlesen(), Edit2.Text)); end;
end;
procedure TForm1.FormCreate(Sender: TObject); begin assignfile(verschluesselt, 'kodiert.txt'); end;
end. |
Hoffe ihr findet den Fehler, ich habe schon fast Kopfweg :D
Moderiert von
Gausi: Code- durch Delphi-Tags ersetztModeriert von
Narses: Topic aus Sonstiges (Delphi) verschoben am Mo 23.11.2009 um 16:31
Nersgatt - Mo 23.11.09 16:54
Zeig mir mal bitte die Stelle in Deinem Quellcode, an der Du erwartet, dass in eine Datei geschrieben wird.
thepaine91 - Mo 23.11.09 17:17
Hi,
1.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| Form1: TForm1; nachricht: TTextDatei; verschluesselt:TTextDatei; private public |
Muck - Mo 23.11.09 19:54
Hallo,
Deine Function Einlesen endet mit eof(nachricht)
Dann in der Function viginere fragst Du immer noch nach EOF(nachricht).
Nun die Eingabedatei ist bereits EOF zu diesem Zeitpunkt.
Am besten beide Proceduren zu einer vereinen, also lesen und schreiben in einer Procedure.
Markus
ffgorcky - Sa 28.11.09 22:43
Also wenn ich das gerade richtig sehe, dann liegt hier der Fehler:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| function Einlesen():string; var ch:char; begin reset(nachricht); result:=''; while not EOF(nachricht) do begin Read(nachricht, ch); result:=result + ch; end;
end; |
Weil Du der result-Variable nur einmal einen Wert zuweisen kannst und damit hört die Funktion dann auf.
Ich würde das ganze daher eher so schreiben:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| function Einlesen():string; var ch:char; rueckgabeString:String; begin reset(nachricht); rueckgabeString:=''; while not EOF(nachricht) do begin Read(nachricht, ch); rueckgabeString:=rueckgabeString + ch; end; result:=rueckgabeString; end; |
So, ich hoffe, das ich Dir damit jetzt keinen Blödsinn erzähle, weil ich das im Moment nicht nachprüfen kann...
elundril - Sa 28.11.09 22:46
ffgorcky hat folgendes geschrieben : |
Weil Du der result-Variable nur einmal einen Wert zuweisen kannst und damit hört die Funktion dann auf.
{..}So, ich hoffe, das ich Dir damit jetzt keinen Blödsinn erzähle, weil ich das im Moment nicht nachprüfen kann... |
tust du leider. in delphi kann man result öfter zuweisen. erst am ende der function wird zurückgesprungen. ich glaub du verwechselst etwas c#/java mit delphi, kann das sein?
lg elundril
ffgorcky - Sa 28.11.09 22:55
elundril hat folgendes geschrieben : |
ich glaub du verwechselst etwas c#/java mit delphi, kann das sein? |
Ja, das kann gut sein, da ich ja Delphi in der Schule gehabt habe (wo ich auf den Programmier-Geschmack gekommen bin) und danach dann in der Ausbildung C#.NET (und in der Berufsschule Java), welche ich aber durch meinen Motorradunfall vor etwa 3 ½ Jahren (also mitte 2006 - unachtsam linksabbiegender Gegenverkehr) wieder vergessen habe.
Es spuken nur ab und an dann doch mal solch ein paar Gedanken dazu in meinem Kopf rum, wie ja z.B. auch gerade hier - nur ist es halt blöd, wenn sie mich dann durcheinanderbringen.
In Delphi habe ich mich ja sonst denke ich schon wieder recht gut eingelebt.
elundril - Sa 28.11.09 23:01
jo, najo, macht ja nix. der compiler schreit ja meistens eh. ;) und is natürlich auch dann ne sache von training und routine. das wird schon wieder.
lg elundril
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!