| 
| Autor | Beitrag |  
| IronBull Hält's aus hier
 Beiträge: 9
 
 
 
 
 | 
Verfasst: Mo 23.11.09 15: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 15: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 16: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 18: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 21: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 21: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 21: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 22: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.
 |  |  |  |