Entwickler-Ecke

Sonstiges (Delphi) - wie mache ich den eine Codierung/eine Dateityp?


yogo - Di 30.11.04 21:44
Titel: wie mache ich den eine Codierung/eine Dateityp?
Hallo, ich habe ein tolles Programm entworfen, und möchte es jetzt dazu bringen, meine Tipparbeit in einem neuen Format zu speichern. Ich freue mich über jede Antwort.


Tino - Di 30.11.04 21:48
Titel: Re: wie mache ich den eine Codierung/eine Dateityp?
Hallo und :welcome: hier im Delphi-Forum.de!

yogo hat folgendes geschrieben:
und möchte es jetzt dazu bringen, meine Tipparbeit in einem neuen Format zu speichern.

Ich glaube du musst uns schon etwas mehr verraten. Ansonsten können wir nur raten. Was genau macht Dein Programm? Was soll gespeichert werden?

Gruß
Tino


yogo - Do 02.12.04 17:48
Titel: Code
Also ich möchte einen Text in einem Memo mit einer Tabelle verschlüsseln. Meine Mutter hat mir nur sagen können, dass man eine menge Tippen muss.


Klabautermann - Do 02.12.04 22:16
Titel: Re: Code
Hallo,
yogo hat folgendes geschrieben:
Also ich möchte einen Text in einem Memo mit einer Tabelle verschlüsseln. Meine Mutter hat mir nur sagen können, dass man eine menge Tippen muss.

das verstehe ich jetzt nicht? Geht es dadrum das ganze zu verschlüsseln und dann wieder als (kryptischen) Text zu speichtern?
Wenn ja, dann sind es 2 Probleme, welche du unabhängig voneinander sehen musst 1. Verschlüsseln 2. Speichern.

Gruß
Klabautermann


CoLdDsToNe - Do 02.12.04 23:45

hi,
wenn ich dich richtig verstanden haben wills du wissen wie man einen text verschlüsseln kann.
Dazu benötigt man folgendes:
1) Text
2) Irgendetwas zum zwischenspeichern
3) eine prozedur oder funktion die dir das macht :D

1 has de ja.
2 ist nur dann notwendig wenn du die daten zum beispiel verschlüsselt speichern wills, zb in ner datei oder so.
3. wenns sich um ne banale sache ahndelt einfach cäsar oder vigenere zahl, ich glaub mit suchfunktion findest ganzen quelltext davon

hoff mal war richtig verstanden 8)


greetz cold


yogo - Fr 03.12.04 10:34
Titel: Richtig Verstanden.
Also, dass versteh ich immer noch nicht. Ich soll also den Text, den ich verschlüsseln will, in ein Memo tippen und die Codierung herunterladen? :!: Wenn dass der richtige Weg ist, bleibt die Frage offen, ob es nicht irgendwie kürzer geht. Ich versteh da nämlich Bahnhof. Könntest du mir dass ausführlicher erklären? :?: :shock:


Tino - Fr 03.12.04 10:41
Titel: Re: Richtig Verstanden.
yogo hat folgendes geschrieben:
Also, dass versteh ich immer noch nicht.

So wirklich verstehe ich dich aber auch nicht. :wink:

yogo hat folgendes geschrieben:
Ich soll also den Text, den ich verschlüsseln will, in ein Memo tippen und die Codierung herunterladen?

Mit Codierung meinst du der verschlüsselte Text, oder? Um mit herunterladen meinst speichern, oder?

Gruß
Tino


yogo - Fr 03.12.04 11:03
Titel: Codierung
Also, herunterladen, damit ist der Quelltext gemeint. Mein Ziel ist es, eine Tabelle zu schreiben(am besten), die etwa so aussieht: I=L, o=8, L=#, d=@ ....! Geht das nicht irgendwie?


CoLdDsToNe - Mi 08.12.04 00:52

yogo hat folgendes geschrieben:
Mein Ziel ist es, eine Tabelle zu schreiben(am besten), die etwa so aussieht: I=L, o=8, L=#, d=@ ....! Geht das nicht irgendwie?


wenn ich dich richtig verstehe will du ne tabelle die definiert welches zeichen in welches umgewandelt wird???

Es ist möglich so, doch ich finds rect umstaändlich und unsicher, da die codierung immer gleich bleibt. Für private zwecke langts jedoch

greetz cold


yogo - Mi 08.12.04 12:20

:roll: Ahh, ich verstehe, es langt für private Zwecke? Dann langt es wohl auch für mich. Ich hab so einen Quellcode schon mal irgenwo gesehen, aber ich weiss nicht wo. Bitte, sag wie es geht!!


Coder - Mi 08.12.04 13:49

Schau dir mal Suche in: Delphi-Forum, Delphi-Library STRINGREPLACE an, damit kann man Zeichen durch andere ersetzen. :wink:


jasocul - Mi 08.12.04 13:56

@yogo:
Ich habe das Gefühl, dass von dir erwartet wird, dass du es erstmal selbst versuchst.

Ein paar Stichwörter:
StringReplace (wie schon vorher erwähnt)
Array, Record (für die Zeichenumwandlungstabelle)
und eine hübsche For-Schleife

Mit den Stichwörtern sollte das Problem zu lösen sein.
Ich glaube nicht, dass jemand für dich die Umwandlungstabelle eintippt. :wink:


yogo - Mi 08.12.04 14:37
Titel: Danke
Vielen Dank! :wink: Ich versuchs erst mal so.


yogo - Mi 08.12.04 15:29

Der Versuch ist nicht geglückt. :( :cry: Vielleicht liegt es daran dass ich mit Delphi 3 arbeite? Wenn das der Fall ist, kannst du mir dann die 'StringReplace.dcu' oder wie die heisst.:flehan:


jasocul - Mi 08.12.04 15:36

Das steht in der Unit SysUtils. Ich weiß aber nicht, ob das auch D3 enthalten ist.
Ansonsten kannst du einen String auch wie ein Array durchlaufen.

Tipp: for i := 1 to length(stringvariable) do ....


Basti - Mi 08.12.04 15:42

Hi, was ist denn missglückt?
Welche Fehlermeldung wird denn ausgespuckt?

Ich habe noch eine einfachere Idee für dich.
Voraussetzung dafür ist, dass du das Wissen für eindimensionale Felder (Arrays) hast.

Unser Alphabet findet sich u.a. im ASCII ZEichensatz wieder.
Dieser Zeichensatz gibt für jede Ordnungszahl ein Zeichen her, von 0 bis - äh - irgendwas... ;)
Praktisch so:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
Ord | Chr
    |
65  |  A
    |
90  |  Z
    |
97  |  a
    |
122  |  z


Die ganze Tabelle findest du mit Sucherei bei Google...
In Delphi gibt es den Befehl Ord(), der die die Ordnungszahl eines Zeichens liefert
und Chr(), der dir das zeichen einer Ordnungszahl liefert.

Mein Vorschlag wäre du bastelst dir eine solche ASCII Tabelle, mit anderen Buchstaben
für jede Ordnungszahl und speicherst sie in einen Array. Also z.Bsp. Zeichensatz[1] := 'z'...
Den Originaltext kannst du dann über Ord als Zahlen anzeigen lassen.
Diese Zahlen gibst du dann als Index für den Array an und shon kommen ganz andere Buchstaben raus.
Das x. Zeichen eines Strings erhältst du über variablenname[x].

Ansonsten sag genau, was dir fehlt, dann helfen wir dir nochmal.


yogo - Mi 08.12.04 15:47

Wie bring ich das jetzt in meinen Code ein? Kann ich das irgendwo hinschreiben? Mit i ist doch ein String oder ein Integer gemeint?


Basti - Mi 08.12.04 15:55

Schau bitte in die Hilfe von Delphi, da steht drinne von welchem Typ
die Zählvariable sein darf.
Zitat:
Zähler ist eine lokale Variable ordinalen Typs ohne Qualifizierer.

Wenn du dann nach ordinalen Typen suchst, findest du raus,
dass ordinale Typen aufzählbare Typen sind.
Damit entfällt ein String, denn es ist kein aufzählbarer Typ, ein Char im Gegenteil dazu schon.

Du müsstest es natürlich in die Prozedur schreiben, in der es angewandt werden soll.


yogo - Mi 08.12.04 16:25
Titel: Eine Reise zum Bahnhof....
Also ich blick jetzt nicht mehr durch. Das mit dem Zähler ist alsoein Weg aufzuzählen wie viele Fehler ich gemacht habe? Vielleicht nicht. Gibt es nicht noch einen anderen Weg, außer StringReplace?


yogo - Mi 08.12.04 16:28

Hier solls rein:

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:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Memo2: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  Neu: String;  //Die neuen Werte aus dem Memo1 in das Memo2
  Alt: String;  //Die alten Werte aus dem Memo1

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin

end;

end.


Also, es soll in die Button1 Click procedur hinein.
Ich möchte aus einem Memo den Text in ein anderes Memo hinein verschlüsseln.

Moderiert von user profile iconChristian S.: Code- durch Delphi-Tags ersetzt.


Stefan-W - Mi 08.12.04 17:12

hi,

du kannst doch einfach eine Function schreiben die wie folgt aussieht:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
function TForm1.Encode(Zeichen: String): String;
begin

if Zeichen = 'A' then Result := '%'
else if Zeichen = 'a' then Result := 'B'
else if Zeichen = 'B' then Result := 'd'

// ... hier bitte dann alle Zeichen die du ändern möchtest reinschreiben

else if Zeichen = 'z' then Result := '|'
else if Zeichen = ' ' then Result := '>';

end;

(für alle andern, ich weis es ist nicht die beste art aber es erfüllt den zweck)
Das wäre dann deine Tabelle.

Vergiss aber bitte nicht die Zeile

Delphi-Quelltext
1:
procedure Encode(Zeichen: String): String;                    

nach der Zeile

Delphi-Quelltext
1:
procedure Button1Click(Sender: TObject);                    

(oben vor private) einzutragen.

und dann schreibst du in deine Button-Procedure noch den aufruf für die Funktion...


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.Button1Click(Sender: TObject);
var i: Integer;
begin
for i := 1 to length(Memo1.Text) do
 begin
 Memo2.Text := Memo2.Text + Encode(Memo1.Text[i]);
 end;
end;


und schon hast du das was du willst.
Bei Fragen BITTE unbedingt in die Hilfe sehen, das spart dir so manche Mühe!
Und immer, immer wieder selbst ausprobieren, da lernst du am meisten!

Tschau

PS.: an die andern: bitte seid mir nicht böse, dass ich gleich eine (vielleicht) passende lösung gepostet hab...


Basti - Mi 08.12.04 17:17

Weisst du, was eine Schleife und eine Verzweigung ist?
Ich ahne da nämlich übles, deshalb zur Vorsicht mal ein Link:
http://www.delphi-source.de/grundlagen/sprache/

Also Nochmal.
1. Lies eine Zeile des Memosaus
2. Gehe jedes Zeichen des Strings durch und verschlüssle es nach deiner Idee
3. gib die Zeile auf dem Ausgabememo aus
Schritte 1-3 müssen so oft wiederholt werden, wie du Zeilen hast.

Erscheint das logisch?
Wie du das verschlüsselst ist dein Ding!
Wir haben dir 2 Wege gezeigt: StringReplace und ich habe dir etwas vom ASCII
Code erzählt...
Vielleicht hilft dir das:
Nimm dir einfach einen Zettel und schreib ein Wort auf.
Dann codierst du dein Wort im Kopf und schreibst es auf (wenn möglich).
Anschließend üüberlegst du, was du gemacht hast und setzt es in Code um.
Also:
1. Buchstaben ausgewählt => verschlüsselt => zu neuem Wort hinzugefügt
2. Buchstaben ausgewählt => verschlüsselt => zu dem 1. verschlüssleten Buchstaben hinzugefügt
3. Buchstaben ausgewählt => verschlüsselt => zu dem verschlüssleten Wort hinzugefügt
....


jasocul - Mi 08.12.04 17:17

@stefan:
Die Anderen die es nicht machen, sind nur zu faul. Alles andere sind Ausreden.
Im ernst: wenn er sich bemüht hat und einfach nicht mehr weiter weiß, ist das schon ok.


Stefan-W - Mi 08.12.04 17:23

@yogo: Basti hat ein wunderbaren weg wie man programmiert! Ich mach des genauso. Wenn ich weis was nacheinander geschieht kann ich das in Code umsetzen, und wenn du das trauf hast geht alles wie von allein...

@jasocul: Danke, binn jetzt erleichtert... Ich dachte ich bekomm jetzt Teamschläge... :roll:


yogo - Mi 08.12.04 18:15

Vielen Dank, bis jetzt hat es funktioniert.Danke, danke, irgenwas musste ja gehen wenn es in delphi 5 geradeso nicht funktioniert het. Danke, danke!!





Hät nicht gedacht dass das mit dem else, if, then Verfahren geht!!


yogo - Mi 08.12.04 18:17

Eine frage noch was ist bitte 'Zeichen'?


Stefan-W - Mi 08.12.04 18:22

Das ist das Parameter in der Funktion. Das was du in den Klammern eingibst wird in der Funktion unter dem Namen geführt... eigendlich eine Variable die aber halt den Übergabe-Parameter beschreibt...


yogo - Do 09.12.04 12:25

Ist sie auch in einem neueren Delphi? :?:


jasocul - Do 09.12.04 12:35

Das ist eine vom Programmierer definierte Übergabe-Variable.
Die Funktion oder Prozedur, die du erstellst, benötigt einen Wert, mit dem diese dann arbeiten kann. Das wird dann als Parameter übergeben.
Innerhalb der Funktion kannst du dann die Variable mit dem übergebenen Wert benutzen.
Das gibts seit vielen Jahren. Sogar schon vor Delphi. Möglicherweise schon bevor du geboren warst. :wink:


yogo - Do 09.12.04 14:20

Stringreplace ist nicht in der sysutils von Delphi 3 drin. Auch Eingabe und Ausgabe sind nirgens zu finden. Kann mir die einer mailen?


yogo - Do 09.12.04 15:09

etwa so:

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:
procedure TForm1.Button1.click(Sender: TObjekt)
var
  i,j,v: integer;
  s,t: string;
  c: character;
begin
  s := (Edit1.text);
  v := (Edit2.text);
  t := (Edit3.text);
  for i := 1 to lenght(s) do
  begin
    c := s[i];
    j := ord(c);
    j := j + v;
    c := chr(j);
    t := t + c;
  end;
  s := '';
  for i := 1 to lenght(t) do
  begin
    s := s + chr(ord(t[i]) - v);
  end
end;


Moderiert von user profile iconUGrohne: Delphi-Tags hinzugefügt.


Stefan-W - Do 09.12.04 15:42

einfach ausprobieren...
bis es das macht was es soll...


yogo - Fr 10.12.04 22:21

iCh krieg es nicht gebacken. Erst will er von mir, dass ich die Variablen nur in die ButtonClick Prozedur reinschreibe. Ich glaube ich tappe im dunkeln.
Ich krieg in nicht einmal dazu, dass er das Ergebnis in ein Edit hineinschreibt. Eingabe und Ausgabe gibts ja auch nicht. lohnt es sich gleich eine neue Delphi Version zu kaufen.


Basti - Fr 10.12.04 22:31

yogo hat folgendes geschrieben:
Eingabe und Ausgabe gibts ja auch nicht. lohnt es sich gleich eine neue Delphi Version zu kaufen.

Was, wenn nicht das Einlesen von Editfeldern und das Ausgeben in Editfeldern, bezeichnest du als Ein- und Ausgabe?
Ich glaube nicht, dass du dir eine neue Delphi Version kaufen musst,
mit Delphi 3 kann man ganz tolle Sachen machen.
Ich glaube es liegt er an etwas anderem...
Was benutzt du denn für Code?


yogo - Sa 11.12.04 12:16

Diesen:

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:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  j,v: integer;
  s,t: string;
  c: char;

implementation

{$R *.DFM}

procedure TForm1.Button1click(Sender: TObject);
var
 k,i : integer;
begin
  s := (Edit1.text);
  k := length(s);
  v := StrToInt(Edit2.text);
  t := (Edit3.text);
  for i := 1 to k do
  begin
    c := s[i];
    j := ord(c);
    j := j + v;
    c := chr(j);
    t := t + c;
  end;
  s := '';
  k := length(t);
  for i := 1 to k do
  begin
    s := s + chr(ord(t[i]) - v);
  end
end;

end.


Moderiert von user profile iconChristian S.: Code- durch Delphi-Tags ersetzt.


Basti - So 12.12.04 14:59

Ich versteh das Problem nicht ganz - es funktioniert doch!
Also Fehler kommen keine und eine Ausgabe hast du ja nirgends programmiert...


yogo - So 12.12.04 21:47

Ja, aber er soll ja das Ergebnis in ein Edit schreiben....


Basti - So 12.12.04 21:55

Na dann musst du den Code dazu schreiben! :lol:

Eingabe => Veraarbeitung => Ausgabe

Eingabe hast du: s := (Edit1.text);
Verarbeitung hast du auch.
Aber wo hast du denn die Ausgabe?

Um etwas einzulesen, speicherst du den Wert eines Editfeldes in einer Variable.
Um etwas auszugeben, speicherst du den Wert ...... in ..... ;)
Die Eingabe ist doch das genaue Gegenteil der Ausgabe.
Nun überlegst du bloß welche Variable ausgegeben werden soll und in welches Editfeld.


yogo - So 12.12.04 21:57

Weiss ich nicht.


Basti - So 12.12.04 22:02

Basti hat folgendes geschrieben:
Nun überlegst du bloß welche Variable ausgegeben werden soll und in welches Editfeld.


yogo hat folgendes geschrieben:
Weiss ich nicht.


Na wenn du nicht weisst welche Variable und welches Editfeld, dann kann ich dir auch nicht helfen...


yogo - So 12.12.04 22:18

In welches Edit Feld ja . Aber wie?


Ja-Pa - So 12.12.04 22:27

Wie wäre es, wenn du uns noch mal genau erklärst, was du eigentlich willst?
Ein eigenes Dateiformat (wie txt, doc, rtf...)? So verstehe ich die Überschrift zumindest.
Oder willst du einfach nur einen Text verschlüsseln? Was soll mit dem verschlüsselten Text dann geschehen?
Ich glaube, hier weiß niemand wirklich was du willst.

Grüße,
Ja-Pa

P.S.: Herzlichen Glückwunsch zum Geburtstag! :party:


Stefan-W - So 12.12.04 22:27

dann schreib uns doch wenigstens Was Wo rein soll

Lösungsvorschlag: (vielleicht kannst du das ja damit dann selbst)


Delphi-Quelltext
1:
Edit1.Text := S;                    


(Das währ vielleicht schon die ganze Ausgabe)


yogo - Mo 13.12.04 11:51

@Stefan-W: Das ich da nicht selbst drauf gekommen bin! :autsch:


@Ja-Pa: Ich möchte in einem Memo oder Edit einen Text eingeben, der dann mit einer Zahl, die in ein Edit eingegeben wird, verschlüsselt wird. Der verschlüsselte Text soll dann auch in einem Memo oder Edit gezeigt werden. Dasselbe kann man auch rückwärts machen.(entschlüsseln)


Edit1

Edit2

Memo1

Memo2


Basti - Mo 13.12.04 16:11

@ Stefan-W:
Ich mühe mir immer einen ab, das so zu erklären, dass der Lerneffekt erhalten bleibt
und sage schon "FÜr Ausgabe musst du die Seiten der Eingabe, also x := Edit1.Text, vertauschen"
und du sagst "Edit1.text := x;" und du erhältst das ganze Lob.
Das ist so unfair, ich habe mich viel mehr angestrengt den Lerneffekt zu erhalten :bawling:
Das sage ich bald meiner Mama ;)
Nee, is schon okay - gut, dass wir es geklärt haben.


Ja-Pa - Mo 13.12.04 16:12

yogo hat folgendes geschrieben:
@Ja-Pa: Ich möchte in einem Memo oder Edit einen Text eingeben, der dann mit einer Zahl, die in ein Edit eingegeben wird, verschlüsselt wird. Der verschlüsselte Text soll dann auch in einem Memo oder Edit gezeigt werden. Dasselbe kann man auch rückwärts machen.(entschlüsseln)


Hier steht wies geht: http://www.delphi-forum.de/viewtopic.php?t=8137&highlight=xor+verschl%FCsselung


Stefan-W - Mo 13.12.04 18:03

@Basti: ich geb dir gern von dem Lob was ab. :lol: wirklich


yogo - Mo 20.12.04 18:12

Danke, danke! Ich habs hingekriegt! Irgendwie hats geklappt, und ich häts es echt nicht geglaubt!