Autor Beitrag
IronBull
Hält's aus hier
Beiträge: 9



BeitragVerfasst: 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.

ausblenden volle Höhe 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
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  nachricht: TTextDatei;
  verschluesselt:TTextDatei;

implementation

{$R *.dfm}
{*************Verschlüsselung********************}

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-1mod length(key)]);
     resulttmp:=resulttmp+char((ord(text[i])+tmp) mod 255);
     write(verschluesselt, resulttmp[i]);
     inc(i);
  end;
  
 close(verschluesselt);
 result:=resulttmp;
 end;

{*************Einlesen****************************}
function Einlesen():string;
var ch:char;
begin
 reset(nachricht);
 result:='';
 while not EOF(nachricht) do
  begin
   Read(nachricht, ch);
   result:=result + ch;
  end;

end;

{*************Datei öffnen*************************}
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;

{*************Ausgabe*******************************}
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 user profile iconGausi: Code- durch Delphi-Tags ersetzt
Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Mo 23.11.2009 um 16:31
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 763
Erhaltene Danke: 27

Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
BeitragVerfasst: Mo 23.11.09 17:17 
Hi,

1.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
  Form1: TForm1;
  nachricht: TTextDatei;  // hat hier nichts zu suchen!
  verschluesselt:TTextDatei;  // hat hier nichts zu suchen!

  private
    { Private declarations } // die sind schon ganz einsam
  public
    { Public declarations }
Muck
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 98
Erhaltene Danke: 8

Win 8, Win 7, Vista, Win XP
Delphi XE3, Delphi 2009, Delphi 2007, Delphi 5
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

BeitragVerfasst: Sa 28.11.09 22:43 
Also wenn ich das gerade richtig sehe, dann liegt hier der Fehler:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
{*************Einlesen****************************}
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:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
{*************Einlesen****************************}
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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Sa 28.11.09 22:46 
user profile iconffgorcky hat folgendes geschrieben Zum zitierten Posting springen:

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

BeitragVerfasst: Sa 28.11.09 22:55 
user profile iconelundril hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: 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.