Autor |
Beitrag |
IronBull
Hält's aus hier
Beiträge: 9
|
Verfasst: Mo 23.11.09 16:37
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.
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
Moderiert von Gausi: Code- durch Delphi-Tags ersetztModeriert von Narses: Topic aus Sonstiges (Delphi) verschoben am Mo 23.11.2009 um 16:31
|
|
Nersgatt
      
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: 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.
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
|
|
thepaine91
      
Beiträge: 763
Erhaltene Danke: 27
Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
|
Verfasst: 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
      
Beiträge: 98
Erhaltene Danke: 8
Win 8, Win 7, Vista, Win XP
Delphi XE3, Delphi 2009, Delphi 2007, Delphi 5
|
Verfasst: 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
      
Beiträge: 573
WIN XP/2000 & 7Prof (Familie:Win95,Win98)
|
Verfasst: 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
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: 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
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
ffgorcky
      
Beiträge: 573
WIN XP/2000 & 7Prof (Familie:Win95,Win98)
|
Verfasst: 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
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: 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
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
|