Autor Beitrag
einfach112
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 168

xp
del7
BeitragVerfasst: Mo 16.11.09 23:39 
Hallo ! ich suche nach einer möglichkeit einen Text der in einem Editfeld steht nach einem Button klick zu ändern und zwar folgend....

edit1.text='Hallo'

TForm1.Button1Click(Sender: TObject);
begin....
und jetzt kommt die frage ! wie kann eine eine Kette von Zeichen/Zahlen/sonderzeichen vorgeben die in einer festen zweiten kette verändert werden !

also ich würde gerne Sagen ....

(abcdefghijklmnopqrstuvwxyz1234567890-.,;:_ABCDEFGHIJKLMNOPRRSTUVWXYZ)
(d,;efghRSijXYZtuyz2314KPB5678vw-._AMNOG:klmnabcpsVWHIFJCDEqroLRTUx90)

wenn eines der in den Klammern stehende zeichen kommt der ersetze dieses mit dem zeichen das in klammer 2 an der gleichen stelle kommt .....
das würde hier in diesem beispiel hier heissen :
Hallo =
VdXXt
Ich möchte keine codierung im Sinne von rot13 oder sonstige Codierungsarten ! nur diese wie oben vorgegeben ! ?

kann mir da jemand weiter helfen !?
(es werden nur kurze wörter geändert bis maximal 30 zeichen .... das heisst es währe auch kein problem wenns länger dauern würde ..... ist halt nicht viel text ......
Bin wie immer über hilfe sehr DANKBAR !
mfg
einfach112


Moderiert von user profile iconNarses: Topic aus Dateizugriff verschoben am Mo 23.11.2009 um 09:30

_________________
sorry bin noob !
Chemiker
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 194
Erhaltene Danke: 14

XP, Vista 32 Bit, Vista 64 Bit, Win 7 64 Bit, Win 10, Win 11
BDS 2006, RAD Studio 2009+C++, Delphi 13, VS 2010 Prof.
BeitragVerfasst: Di 17.11.09 00:11 
Hallo,

nur mal so als Idee. Wenn Du 2 Arrays anlegst für die beiden Zeichenfolgen in der gleichen Reihenfolgen und dann mit dem Index der erste auf dem zweiten Array zugreifst.

Zuvor den original String zerlegen Index suchen und dann mit dem Index in dem zweiten Array den String neu zusammensetzen.

Bis bald Chemiker
der organist
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 467
Erhaltene Danke: 17

WIN 7
NQC, Basic, Delphi 2010
BeitragVerfasst: Di 17.11.09 14:16 
StringReplace? EInfach mal so in den Raum geworfen....und die beiden Arrays dafür natürlich

_________________
»Gedanken sind mächtiger als Waffen. Wir erlauben es unseren Bürgern nicht, Waffen zu führen - warum sollten wir es ihnen erlauben, selbständig zu denken?« Josef Stalin
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: Di 17.11.09 16:02 
das blöde in diesem fall bei einem stringreplace ist, wie merkst du dir die schon ersetzten zeichen? Demnach wäre mMn das beste den String Sequenziel durchlaufen zu lassen und jedes Zeichen einzeln zu ersetzen. hat zwar ne blöde laufzeit aber mit fällt grad nix besseres ein.

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
der organist
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 467
Erhaltene Danke: 17

WIN 7
NQC, Basic, Delphi 2010
BeitragVerfasst: Di 17.11.09 17:06 
naja, kannst ja jedes Zeichen mit ner for-schleife durchgehen und ändern, wenn nötig. Da is es doch nich nötig, zu wissen, welches du schon geändert hast, du gehst doch sowieso jedes genau einmal durch...

_________________
»Gedanken sind mächtiger als Waffen. Wir erlauben es unseren Bürgern nicht, Waffen zu führen - warum sollten wir es ihnen erlauben, selbständig zu denken?« Josef Stalin
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: Di 17.11.09 17:12 
schau mal:

du änderst f auf g zum beispiel. dann wenn du g auf s ändern willst, nimmst du ja die ursprünglichen fs auch wieder mit. das heißt du hast dann f -> g -> s. anders gesagt, dir gehen einige zeichen verloren.

und stringreplace ersetzt nun mal alle vorkommen von g in einem text, egal ob die vorher f waren oder nicht.

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
einfach112 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 168

xp
del7
BeitragVerfasst: Do 19.11.09 00:46 
Hallo !
Danke für euren vielen antworten und Ideen .....

Chemiker...
das hört sich gut an was du schreibst .... leider fehlt mir dazu etwas das hintergrundwissen .... könntest du mir vieleicht ansatzweise etwas quellcode liefern ! ?

Währe sehr nett von dir !
thx schonmal im voraus !
mfg
einfach112

_________________
sorry bin noob !
Chemiker
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 194
Erhaltene Danke: 14

XP, Vista 32 Bit, Vista 64 Bit, Win 7 64 Bit, Win 10, Win 11
BDS 2006, RAD Studio 2009+C++, Delphi 13, VS 2010 Prof.
BeitragVerfasst: Do 19.11.09 23:34 
Hallo einfach112,

einfach112 hat folgendes geschrieben:
das hört sich gut an was du schreibst .... leider fehlt mir dazu etwas das hintergrundwissen .... könntest du mir vieleicht ansatzweise etwas quellcode liefern ! ?


Es ist ein einfache Umsetzung und nicht auf Geschwindigkeit getrimmt sollte aber funktionieren.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
function CodeErstellen(sOrignal, sCode, sText: String): String;
var
  iz: integer;
  iz1: integer;
  chCode: Char;
begin
  for iz := 1 to length(sText) do
  begin
    iz1:=0;
    for chCode in sOrignal do
    begin
      inc(iz1);
      if chCode=sText[iz] then
      begin
        Result:= Result+ sCode[iz1];
      end;
    end;
  end;
end;

Und so wird die Funktion aufgerufen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.Button1Click(Sender: TObject);
var
  strOrignal: String;
  strCode, strO: String;
  strOriginalText: String;
begin
  strOrignal:=('abcdefghijklmnopqrstuvwxyz1234567890-.,;:_ABCDEFGHIJKLMNOPRRSTUVWXYZ');
  strCode:=   ('d,;efghRSijXYZtuyz2314KPB5678vw-._AMNOG:klmnabcpsVWHIFJCDEqroLRTUx90');
  Edit1.Text:= CodeErstellen(strOrignal, strCode, Edit1.Text);
end;

Bis bald Chemiker
einfach112 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 168

xp
del7
BeitragVerfasst: So 22.11.09 01:36 
Hallo ! Danke für deine tolle antwort....Nur leider bekomme ich beim compilieren folgende fehlermeldung :


[Fehler] Unit1.pas(43): Operator ist auf diesen Operandentyp nicht anwendbar
das ist folgende zeile der function :
for chCode in sOrignal do


was nun !?
mfg
einfach112

_________________
sorry bin noob !
DaRkFiRe
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 526

WinXP Home & Professional
C, C++, Delphi
BeitragVerfasst: So 22.11.09 02:28 
Damit das Problem aufgenommen und verstanden werden kann, hier mal kein Source zum Copy&Paste-Vergewaltigen, sondern eine Beschreibung zur Problemlösung:

Q ... Quell-String (lies: zu verschlüsselnde Eingabe)
R ... Ziel-String (lies: verschlüsselte Ausgabe)
V ... Hilfsvektor mit 256 Elementen vom Typ Byte
K1 ... Quell-Schlüssel (hier: strOriginal)
K2 ... Ziel-Schlüssel (hier: strCode)
Ai ... ASCII Code von K1 an der Stelle i (mittels 'Ord'-Funktion)
Bi ... ASCII Code von K2 an der Stelle i (dito)
Qj ... ASCII Code von Q an der Stelle j (dito)
i ... Iterator-Variable
j ... Iterator-Variable
n ... Länge von K1 (bzw. K2 da |K1|=|K2| - die Längen sind identisch)
m ... Länge von Q

Relation im Hilfsvektor aufbauen

für alle i=1..n
V[Ai] = Bi

Relation benutzen, um Ziel-String zu erzeugen

für alle j=1..m
R = R + V[Qj]

V[Qj] ist nur für Zeichen Qj definiert, die in K1 vorkommen.

Es ist ratsam, den Hilfsvektor vor der Relationsbildung zu initialisieren (beispielsweise mit Leerzeichen).

Das o.g. Prinzip ähnelt einer S-Box, mit dem Unterschied, dass S-Boxen bijektiv (also eineindeutig sind).

_________________
Lang ist der Weg durch Lehren - kurz und wirksam durch Beispiele! Seneca
einfach112 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 168

xp
del7
BeitragVerfasst: So 22.11.09 02:59 
ok ! also für die die doch etwas an quelltext brauchen die vieleicht auch noch wie ich d7 verwenden ....

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
function CodeErstellen(sOrignal, sCode, sText: String): String;
var
  iz: integer;
  iz1: integer;
  chCode: char;
  x:integer;
begin
for iz := 1 to length(sText) do
 begin
    iz1:=0;
  //   for chCode in sOrignal do
  for x := 1 to length(sOrignal) do
    begin
    chCode := SOrignal[x];
      inc(iz1);
      if chCode=sText[iz] then
      begin
        Result:= Result+ sCode[iz1];
      end;
    end;
  end;
end;






aber habe immer noch ein klitze kleines problem !
....
mein text komplett sieht nun so aus :
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:
function CodeErstellen(sOrignal, sCode, sText: String): String;
var
  iz: integer;
  iz1: integer;
  chCode: char;
  x:integer;
begin
for iz := 1 to length(sText) do
 begin
    iz1:=0;
  //   for chCode in sOrignal do
  for x := 1 to length(sOrignal) do
    begin
    chCode := SOrignal[x];
      inc(iz1);
      if chCode=sText[iz] then
      begin
        Result:= Result+ sCode[iz1];
      end;
    end;
  end;
end;



procedure TForm1.Button1Click(Sender: TObject);

var
  strOrignal: String;
  strCode, strO: String;
  strOriginalText: String;
begin
  strOrignal:=('abcdefghijklmnopqrstuvwxyz1234567890-.,;:_ABCDEFGHIJKLMNOPRRSTUVWXYZ');
  strCode:=   ('d,;efghRSijXYZtuyz2314KPB5678vw-._AMNOG:klmnabcpsVWHIFJCDEqroLRTUx90');
  Edit2.Text:= CodeErstellen(strOrignal, strCode, Edit1.Text);
end;






procedure TForm1.Button2Click(Sender: TObject);
var
  strOrignal: String;
  strCode, strO: String;
  strOriginalText: String;
begin
strCode     :=('abcdefghijklmnopqrstuvwxyz1234567890-.,;:_ABCDEFGHIJKLMNOPRRSTUVWXYZ');
strOrignal  :=('d,;efghRSijXYZtuyz2314KPB5678vw-._AMNOG:klmnabcpsVWHIFJCDEqroLRTUx90');
  Edit3.Text:= CodeErstellen(strOrignal, strCode, Edit2.Text);
end;



end.




wenn ich nun im ersten editfeld anna eingebe und klicke button 1 steht im edit 2 feld : dZZd
das ist auch richtig !
wenn ich dann auf button2 klicke steht im edit 3 auch wieder anna ! Super !

wenn ich allerdings z.B. im edit 1 feld ha eingebe dann steht im edit2 feld : Rd ist auch richtig ! aber wenn ich dann wieder auf button2 klicke steht im edit3 feld auf einfmal : hUa.....

wie kommt der auf einmal an das grosse U ? ? ? ? ? ? ? ? ? ? ?

_________________
sorry bin noob !
einfach112 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 168

xp
del7
BeitragVerfasst: So 22.11.09 04:45 
wobei .... hat sich auch erledigt .....
habe oben die zeichenfolgen nicht richtig gehabt ! einfach nochmal neu geschrieben und alles läuft ! THX !

_________________
sorry bin noob !