Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Zeichen umwandeln
xan553 - Mi 24.01.07 16:31
Titel: Zeichen umwandeln
Hy ich bins mal wieder :wink:
Ich habe mir mit en paar freunden ma gedacht es wäre doch ganz witzig ein programm zu machen, bei dem man in einem fenster einen text eingibt,
dann auf einen button klickt und dann der text in einem layout mit bestimmten zeichen wieder ausgegeben wird,
ich weiß aber leider nicht, wie ich anfangen soll, und auch nicht welchen code ich dem button geben muss das er allen buchstaben bestimmte zeichenfolgen zuordnet.
bitte um hilfe
mfg michse
perry5 - Mi 24.01.07 16:43
ähm, du hast einfach eine Tabelle.
Wenn du immer genau EIN Zeichen ind eine Zeichenkette umwandeln wilslt, also aus 'W' beispielsweise '\/\/' machen wilslt geht das einfach.
Ein Array, das du über das Zeichen indizeirne kannst, in dem einfach nur strings gespeichert werden.
Dann kansnte die Eingabe-Zeichenkette durchgehen und für jedes Zeichen der UasgabeZeichenkette den entsprechenden String aus dem Array anhängen.
xan553 - Mi 24.01.07 16:45
könnte mir mal jemand dazu einen beispielcode zeigen?
Marc. - Mi 24.01.07 16:46
Nicht ein wenig umständlich?
Ich hätte es mit StringReplace(); gemacht ;)
xan553 - Mi 24.01.07 16:49
ich ahbe kaum ahnung von delphi, sprecht bitte deutsch mit mir *fleh* ^^
Marc. - Mi 24.01.07 16:56
Kein Problem. ;)
Wenn ich dich richtig verstanden habe, willst du bestimmte "Buchstaben" bzw. Zeichen durch andere ersetzen. Right?
Dies geht zB. mit Stringreplace();!
Kleines Beispiel:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| var s: String; begin s := 'abcdef'; s := StringReplace('c','D',[rfreplaceall]); end; |
grüße marc
xan553 - Mi 24.01.07 17:08
fast richtig, ich möchte in ein feld einen text eingeben dann sollte der text mit einem klick auf codieren im label unter "Ausgabe"
Wieder ausgegeben werden und das selbe soll auf mit einem klick auf decodieren möglich sein.
xan553 - Mi 24.01.07 21:35
kann mir denn keiner helfen?
joker0000 - Mi 24.01.07 21:40
also ich denke, den rest kannst du auch alleine machen. einfach n memo. dann den inhalt des memos in nen string. dann solltest du mit stringreplace schon was auf die reihe bekommen.
jaenicke - Mi 24.01.07 21:43
Schiebepostings früher als 24 Stunden nach deiner letzten Frage sind hier im Forum unerwünscht, das mal so als Hinweis...
xan553 hat folgendes geschrieben: |
| kann mir denn keiner helfen? |
Naja, helfen könnten sicherlich viele, aber aus deinen Aussagen wird nicht wirklich deutlich, wo eigentlich dein Problem liegt...
Was hast du denn bisher versucht? Zeig mal deinen Code...
Ich seh grad, dass
jakobwenzel bereits den Link gebracht hat, den ich auch grad noch dazuschreiben wollte... ;-)
xan553 - Mi 24.01.07 21:53
eben das ist es ja, ich komme nicht auf den richtigen code,
| Zitat: |
Kein Problem. ;)
Wenn ich dich richtig verstanden habe, willst du bestimmte "Buchstaben" bzw. Zeichen durch andere ersetzen. Right?
Dies geht zB. mit Stringreplace();!
Kleines Beispiel:
ausblenden anzeigen Delphi-Quelltext
ausgeblendet markieren
1:
2:
3:
4:
5:
6:
var
s: String;
begin
s := 'abcdef';
s := StringReplace('c','D',[rfreplaceall]); // in s steht nun 'abDef'
end;
|
funktioniert nicht, ich suche einen code der mir zum beispiel alle buchstaben a,A raussucht und durch 001101 ersetzt
jaenicke - Mi 24.01.07 21:56
Aber genau das macht doch StringReplace? :gruebel:
Das Beispiel hier ist etwas falsch, so ists richtig:
Delphi-Quelltext
1:
| s := StringReplace(s, 'c','D',[rfreplaceall]); |
Robinator - Mi 24.01.07 21:57
xan553 hat folgendes geschrieben: |
eben das ist es ja, ich komme nicht auf den richtigen code,
| Zitat: |
Kein Problem. ;)
Wenn ich dich richtig verstanden habe, willst du bestimmte "Buchstaben" bzw. Zeichen durch andere ersetzen. Right?
Dies geht zB. mit Stringreplace();!
Kleines Beispiel:
ausblenden anzeigen Delphi-Quelltext
ausgeblendet markieren
1:
2:
3:
4:
5:
6:
var
s: String;
begin
s := 'abcdef';
s := StringReplace('c','D',[rfreplaceall]); // in s steht nun 'abDef'
end;
|
funktioniert nicht, ich suche einen code der mir zum beispiel alle buchstaben a,A raussucht und durch 001101 ersetzt |
dann solltest du evtl mal lesen, was du da gequotet hast :roll:
Saubäär - Mi 24.01.07 22:02
Hi xan,
so wie ich das verstanden habe, willst du nen String verschlüsseln - oder?
Wenn ja, so würde es gehen (ist aber relativ leicht zu knacken):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.Button1Click(Sender: TObject); var i: Integer; s: String; begin s := Edit1.Text; for i := 1 to Length(s) do s[i] := char(i xOr Ord(s[i])); Edit1.Text := s; end; |
Gruß
Saubäär
xan553 - Do 25.01.07 07:07
richtig nur eben in von mir gewählte zeichen
jaenicke - Do 25.01.07 07:53
Du willst doch einfach nur, dass ein bestimmter Buchstabe durch eine bestimmte Buchstabenfolge ersetzt wird, oder?
Nun ja, und genau das macht ja StringReplace!
Hast du dir mal angesehen, was es macht?
xan553 - Do 25.01.07 12:50
ja habe ich, das müsste ich doch mit IF befehlen hinbekommen oder?
jaenicke - Do 25.01.07 13:01
Du brauchst kein if! Du musst nur StringReplace aufrufen. Das ersetzt dir dann doch den Buchstaben durch einen anderen String und fertig.
Ist dir denn klar, was StringReplace macht und wie du es benutzt?
Eine andere in diesem Fall vielleicht passendere Lösung wäre folgende, dann gibts auch kein Problem mit zirkulären Ersetzungen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| var i: Integer; OriginalText, NewText: String; begin OriginalText := 'Ein Test'; NewText := ''; for i := 1 to Length(OriginalText) do case OriginalText[i] of 'E': NewText := NewText + '10010101'; 'T': NewText := NewText + 'casdfasd'; 's': NewText := NewText + '10000001'; else NewText := NewText + OriginalText[i]; end; ShowMessage(NewText); |
Blackheart666 - Do 25.01.07 13:02
Dann probier doch auch mal was den code stellst Du dann hier rein, und man wird Dir dann sicherlich weiterhelfen können.
Bis jetzt sieht es so aus als wolltest Du nur nur eine fertige Lösung, obwohl sie ja eigentlich hier schon genannt wurde.
xan553 - Do 25.01.07 13:25
also ich habe mir jetzt mal das mit dem code eingestellt wie ich ihn möchte
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure TForm1.Button1Click(Sender: TObject);
var i: Integer; OriginalText, NewText: String; begin OriginalText := 'a'; NewText := '000101'; for i := 1 to Length(OriginalText) do case OriginalText[i] of 'E': NewText := NewText + '10010101'; 'T': NewText := NewText + 'casdfasd'; 's': NewText := NewText + '10000001'; else NewText := NewText; end; edit1.text; end. |
er würde mit mit dem
funktionieren aber wenn ich
schreibe, kann ich sooft ich will auf meinen buttom klicken aber es passiert nichts.
jaenicke - Do 25.01.07 13:37
Sieh dir bitte mal den bereits in einer früheren Antwort verlinkten Crashkurs an!!! Dir fehlen offenbar die elemntarsten Grundlagen! Edit1.Text ist kein Befehl, den du einfach so hinschreiben kannst. Das nur als Beispiel.
Hier nochmal der Link zum Crashkurs:
http://crashkurs.christian-stelzmann.de/
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| for i := 1 to Length(OriginalText) do case OriginalText[i] of 'E': NewText := NewText + '10010101'; 'T': NewText := NewText + 'casdfasd'; 's': NewText := NewText + '10000001'; else NewText := NewText; end; |
Was das macht ist folgendes: Es geht zeichenweise durch den Originaltext, also den Text, in dem die Zeichen ersetzt werden sollen, und siehst dann nach, was das aktuelle Zeichen für ein Zeichen ist. Hier im Beispiel sieht er nach, ob es ein E, T oder s ist. Und abhängig davon, was für ein Buchstabe an der aktuellen Stelle steht, wird entweder eine Ersetzung oder der Buchstabe selbst (else) in den neuen Text, also das, was dabei herauskommen soll, geschrieben.
Miri - Do 25.01.07 13:44
jaenicke hat folgendes geschrieben: |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| for i := 1 to Length(OriginalText) do case OriginalText[i] of 'E': NewText := NewText + '10010101'; 'T': NewText := NewText + 'casdfasd'; 's': NewText := NewText + '10000001'; else NewText := NewText + OriginalText[i]; end; |
|
das dürfte da noch gefehlt haben ;-)
jaenicke - Do 25.01.07 13:46
Darauf habe ich ja gar nicht geachtet, dass er das auch noch gelöscht hat... :roll:
Im Originalpost von mir wars noch drin... *seufz*
Ich hab jetzt einfach den Code genommen, den er grad gepostet hat...
xan553 - Do 25.01.07 14:41
ok bin schon viel weiter dank eurer hilfe, aber wenn ich nun
Delphi-Quelltext
1: 2: 3:
| 'E': NewText := '000111'; 'T': NewText := '111111'; 's': NewText := '000000'; |
habe und ich:
"ETS" eingebe, dann erhalte ich
"111111S"
müsste ich normal nicht
"000111111111S" erhalten?
Miri - Do 25.01.07 14:46
Super...
wie viele Leute hier haben dir jetzt schon den Crashkurs ans Herz gelegt?! Und warum fängst du nicht von vorne an, wenn du programmieren lernen willst?
Und noch ne Frage: ist selbst ABSCHREIBEN sooo schwer?
jaenicke hat folgendes geschrieben: |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| for i := 1 to Length(OriginalText) do case OriginalText[i] of 'E': NewText := NewText + '10010101'; 'T': NewText := NewText + 'casdfasd'; 's': NewText := NewText + '10000001'; else NewText := NewText + OriginalText[i]; end; |
|
azubi_20 - Do 25.01.07 15:00
xan553 hat folgendes geschrieben: |
ok bin schon viel weiter dank eurer hilfe, aber wenn ich nun
Delphi-Quelltext 1: 2: 3:
| 'E': NewText := '000111'; 'T': NewText := '111111'; 's': NewText := '000000'; |
habe und ich: "ETS" eingebe, dann erhalte ich "111111S"
müsste ich normal nicht "000111111111S" erhalten? |
na guck mal genau hin :
aus
E wird 000111
aus
T wird 111111
aus
s wird 000000
und dein Beispiel : "
ETS"
was wird aus dem "
S" ?
s ist nicht gleich
S !
Tipp : such mal nach
UpperCase()
Miri - Do 25.01.07 15:07
xan553 hat folgendes geschrieben: |
dann erhalte ich "111111S"
müsste ich normal nicht "000111111111S" erhalten? |
Das mit dem S hat er scheinbar verstanden...
das Problem ist, dass er erst 000111 in den String packt und den kompletten String dann mit 111111 überschreibt...
Und ich vermute einfach mal, dass er den ELSE-Zweig tatsächlich richtig abgeschrieben hat, daher wird das S drangehängt anstatt den String wieder zu überschreiben ;-)
Blackheart666 - Do 25.01.07 15:09
azubi_20 hat folgendes geschrieben: |
xan553 hat folgendes geschrieben: | ok bin schon viel weiter dank eurer hilfe, aber wenn ich nun
Delphi-Quelltext 1: 2: 3:
| 'E': NewText := '000111'; 'T': NewText := '111111'; 's': NewText := '000000'; |
habe und ich: "ETS" eingebe, dann erhalte ich "111111S"
müsste ich normal nicht "000111111111S" erhalten? |
na guck mal genau hin :
aus E wird 000111
aus T wird 111111
aus s wird 000000
und dein Beispiel : "ETS"
was wird aus dem "S" ?
s ist nicht gleich S !
Tipp : such mal nach UpperCase() |
Ich glaube das kleine s war beabsichtigt, er wollte nur E und T sollten ersetzt werden klein s ignoriert.
000111111111S
xan553 - Do 25.01.07 16:00
so habs endlich ^^
muss nurnoch das script umscvhreiben zum umwandeln und dann isses fertig
Danke an alle
xan553 - Do 25.01.07 16:03
achso nochmal was
mit diesder zeile
Delphi-Quelltext
1:
| '000101': NewText := NewText + 'A'; |
bekomme ich den fehler
[Error] Codierer.pas(118): Incompatible types: 'Char' and 'String'
edit:
habe aber auch gemerkt, das es nur bei
Delphi-Quelltext
1:
| '0': NewText := NewText + 'A'; |
geht
ich denke das man da nur ein zeichen einsetzen kann oder?
Marc. - Do 25.01.07 16:10
Heyho
Bitte(!!) editier deine Beiträge!
Und zu deinem Problem: Bei im Falle von Case Of lassen sich nur ordinale Typen verwenden!
D.h. 1,2,3,4,5,8,9... Zahlen; a,b,c,d,e,f... und Buchstaben(=Zeichen) alias "Char"!
Mfg
xan553 - Do 25.01.07 16:15
hm
das heißt ich kann das ganze nur wieder rückgängig machen indem ich stringreplace benutze oder gibt es da noch andere möglichkeiten
Blackheart666 - Do 25.01.07 16:30
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure TForm1.CodierenClick(Sender: TObject); var TmpStr: string; begin TmpStr:= Edit1.Text; TmpStr := StringReplace(TmpStr, 'E', '000111', [rfReplaceAll, rfIgnoreCase]); TmpStr := StringReplace(TmpStr, 'T', '111111', [rfReplaceAll, rfIgnoreCase]); TmpStr := StringReplace(TmpStr, 'S', '000000', [rfReplaceAll, rfIgnoreCase]); Edit1.Text:=TmpStr; end;
procedure TForm1.EncodierenClick(Sender: TObject); var TmpStr: string; begin TmpStr:= Edit1.Text; TmpStr := StringReplace(TmpStr, '000111', 'E', [rfReplaceAll, rfIgnoreCase]); TmpStr := StringReplace(TmpStr, '111111', 'T', [rfReplaceAll, rfIgnoreCase]); TmpStr := StringReplace(TmpStr, '000000', 'S', [rfReplaceAll, rfIgnoreCase]); Edit1.Text:=TmpStr; end; |
Ich hoffe Du verstehts auch was da Steht :wink:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!