![]() |
Übersetzer - Ansatzprobleme
Hallo,
wie kann man denn einen Uebersetzer programmieren, d.h. einzelne Wörter oder Buchstaben erfassen und diese verändern, bzw anders formatiert in ein anderes Edit/Memofenster verfrachten? Danke schonmal! |
Re: Übersetzer - Ansatzprobleme
Was meinst du mit Übersetzen? Interpreieren?
|
Re: Übersetzer - Ansatzprobleme
HI,
Danke für die schnelle Antwort. Zum Beispiel a->4 und i->! oder auch hallo->hello und auf wiedersehen->goodbye Danke |
Re: Übersetzer - Ansatzprobleme
Im onChange könntest du den Inhalt mit einer Liste Abgleichen und wenn etwas gefunden wird das ergebnis Ausgegeben werden.
|
Re: Übersetzer - Ansatzprobleme
Wie kann man denn abgleichen, nur mit if und case oder gibt es da andere Möglichkeiten?
Und was ist wenn ich dann ai eingebe? Das a wird 4 aber ai kennt er ja dann nicht, oder? mfG |
Re: Übersetzer - Ansatzprobleme
Mit if oder case wäre es ja etwas viel was abgeprüft werden müßte. Ich würde z.B. mit einer ValueList arbeiten.
|
Re: Übersetzer - Ansatzprobleme
Und zu 'ai' hast du keine Lösung?
Aber trotzdem schon mal vielen Dank! |
Re: Übersetzer - Ansatzprobleme
Willst du nun einen Sprachübersetzer oder ein Buchstaben->Zahl Übersetzer machen.
Ord('a')-48 = 1 |
Re: Übersetzer - Ansatzprobleme
Es soll eine Symbolübersetzung werden:
hallo-->|-|4110 mkinzler-->|\/| |{ ! |\| z 1 3 ,- nur zum gaudi... |
Re: Übersetzer - Ansatzprobleme
du meinst wahrscheinlich das hier ->
![]() |
Re: Übersetzer - Ansatzprobleme
Ja genau das.
Wie programmier ich das(ich brauch nur nen Ansatz, wie die einzelnen Buchstaben erfasst werden....) mfG |
Re: Übersetzer - Ansatzprobleme
Zitat:
Delphi-Quellcode:
Das musst du eben für jeden buchstaben des Alphabets machen...
NewText := StringReplace(OldText, 'E', '3', [rfReplaceAll, rfIgnoreCase])
|
Re: Übersetzer - Ansatzprobleme
Oder du informierst dich mal über formale Sprachen, das ist glaub ich schonmal ne sehr gute Grundlage für den theoretischen Ansatz...
![]() Das Thema ist aber nicht sooo einfach(soll nicht heißen, dass es sehr schwer ist), vorallem deswegen, weil es auch Besandteil des info-studiums ist... Wie das mit Delphi am besten umzusetzten ist...keine Ahnung...hab mich damit bisher nur theoretisch beschäftigt :roll: |
Re: Übersetzer - Ansatzprobleme
Zitat:
|
Re: Übersetzer - Ansatzprobleme
Zitat:
ist es so schwer, mit 8k+ Beiträgen halbwegs sinnvolle und informative Beiträge zu erstellen? |
Re: Übersetzer - Ansatzprobleme
Es wäre nur eine If-Anweisung
|
Re: Übersetzer - Ansatzprobleme
Zitat:
|
Re: Übersetzer - Ansatzprobleme
Hallo nochmal,
Wie bekomme ich denn den Text aus einer Memo? also:
Delphi-Quellcode:
funktioniert, aber
edit2.text := StringReplace(edit1.text, 'E', '3', [rfReplaceAll, rfIgnoreCase])
Delphi-Quellcode:
nicht.
memo2.lines := StringReplace(memo1.lines, 'E', '3', [rfReplaceAll, rfIgnoreCase])
Wie bekomme cih das zum laufen? mfG |
Re: Übersetzer - Ansatzprobleme
Du mußst zuerst den Inhalt in eine temporäre Variable schreiben
Delphi-Quellcode:
s := memo1.lines;
memo2.lines := StringReplace(s, 'E', '3', [rfReplaceAll, rfIgnoreCase]) |
Re: Übersetzer - Ansatzprobleme
Wenn ich das mache passiert trotzdem das selbe:
[Fehler] Unit1.pas(37): Inkompatible Typen: 'String' und 'TStrings' und gleich noch ne Frage:
Delphi-Quellcode:
Erstmal sorry weils so lange ist, aber wenn ich jetzt in Edit1 was eingebe sind die Keys nach 2 Tasten gesperrt. Weiss jemand warum? (Es sind keine OnKeyPress- oder sowas Ereignisse eingestellt)
procedure TForm1.Button1Click(Sender: TObject);
begin edit2.text := StringReplace(edit1.text, 'a', '4 ', [rfReplaceAll, rfIgnoreCase]); edit2.text := StringReplace(edit1.text, 'b', '|3 ', [rfReplaceAll, rfIgnoreCase]); edit2.text := StringReplace(edit1.text, 'c', '[ ', [rfReplaceAll, rfIgnoreCase]); edit2.text := StringReplace(edit1.text, 'd', '|) ', [rfReplaceAll, rfIgnoreCase]); edit2.text := StringReplace(edit1.text, 'E', '3 ', [rfReplaceAll, rfIgnoreCase]); edit2.text := StringReplace(edit1.text, 'f', '|= ', [rfReplaceAll, rfIgnoreCase]); edit2.text := StringReplace(edit1.text, 'g', '9 ', [rfReplaceAll, rfIgnoreCase]); edit2.text := StringReplace(edit1.text, 'h', '|-| ', [rfReplaceAll, rfIgnoreCase]); edit2.text := StringReplace(edit1.text, 'i', '! ', [rfReplaceAll, rfIgnoreCase]); edit2.text := StringReplace(edit1.text, 'j', '_| ', [rfReplaceAll, rfIgnoreCase]); edit2.text := StringReplace(edit1.text, 'k', '|{ ', [rfReplaceAll, rfIgnoreCase]); edit2.text := StringReplace(edit1.text, 'l', '1 ', [rfReplaceAll, rfIgnoreCase]); edit2.text := StringReplace(edit1.text, 'm', '|\/| ', [rfReplaceAll, rfIgnoreCase]); edit2.text := StringReplace(edit1.text, 'n', '|\| ', [rfReplaceAll, rfIgnoreCase]); edit2.text := StringReplace(edit1.text, 'o', '0 ', [rfReplaceAll, rfIgnoreCase]); edit2.text := StringReplace(edit1.text, 'p', '|° ', [rfReplaceAll, rfIgnoreCase]); edit2.text := StringReplace(edit1.text, 'q', '[,] ', [rfReplaceAll, rfIgnoreCase]); edit2.text := StringReplace(edit1.text, 'r', ',- ', [rfReplaceAll, rfIgnoreCase]); edit2.text := StringReplace(edit1.text, 's', '5 ', [rfReplaceAll, rfIgnoreCase]); edit2.text := StringReplace(edit1.text, 't', '7 ', [rfReplaceAll, rfIgnoreCase]); edit2.text := StringReplace(edit1.text, 'u', '|_| ', [rfReplaceAll, rfIgnoreCase]); edit2.text := StringReplace(edit1.text, 'v', '\/ ', [rfReplaceAll, rfIgnoreCase]); edit2.text := StringReplace(edit1.text, 'w', '\/\/ ', [rfReplaceAll, rfIgnoreCase]); edit2.text := StringReplace(edit1.text, 'x', '}{ ', [rfReplaceAll, rfIgnoreCase]); edit2.text := StringReplace(edit1.text, 'y', '\|/ ', [rfReplaceAll, rfIgnoreCase]); edit2.text := StringReplace(edit1.text, 'z', '2 ', [rfReplaceAll, rfIgnoreCase]); edit2.text := StringReplace(edit1.text, 'ä', '43 ', [rfReplaceAll, rfIgnoreCase]); edit2.text := StringReplace(edit1.text, 'ö', '03 ', [rfReplaceAll, rfIgnoreCase]); edit2.text := StringReplace(edit1.text, 'ü', '|_|3 ', [rfReplaceAll, rfIgnoreCase]); edit2.text := StringReplace(edit1.text, '?', '! ', [rfReplaceAll, rfIgnoreCase]); edit2.text := StringReplace(edit1.text, '.', '* ', [rfReplaceAll, rfIgnoreCase]); end; --> sorry hatte MaxLength eingestellt Nochwas: Der Text wird 1:1 kopiert in Edit2 und nicht verändert, warum? mfG |
Re: Übersetzer - Ansatzprobleme
Sorry muß natürlich
Delphi-Quellcode:
heißen
s := memo1.lines.Text;
BTW. wprde statt Zitat:
|
Re: Übersetzer - Ansatzprobleme
Und viel schöner wird dein Code noch so ;)
Delphi-Quellcode:
var
Chars: array[0..2] of string = ('E', 'M', 'T'); Replacement: array[0..2] of string = ('3', '|\/|', '7'); for i := 0 to Length(Chars) - 1 do NewText := StringReplace(OldText, Chars[i], Replacement[i], [rfReplaceAll, rfIgnoreCase]); |
Re: Übersetzer - Ansatzprobleme
Anstelle die StringReplace-Funktion zu nutzen, die bei so vielen Aufrufen recht langsam ist, würde ich Lösungen wie beispielsweise
![]() |
Re: Übersetzer - Ansatzprobleme
Zitat:
|
Re: Übersetzer - Ansatzprobleme
ich bin hier über die suche gelandet und meine frage ist auch etwas offtopic aber:
ich möchte einen sehr einfachen sprache-zu-sprache übersetzer schreiben und mir fehlen etwas die ansätze. ich denke ein (z.B Ini [wegen "=" ])-File ist irgendwie ungünstig was performance, DB-size usw angeht. sagen wir es so: ich habe eine konsole, ich gebe ein "translate://morgen" und hätte nun gern die ausgabe der möglichen übersetzungen. wie müsste ich vorgehen? vielen dank. gruß |
Re: Übersetzer - Ansatzprobleme
Da bietet sich eine Datenbank (MySQL, Firebird, ist hier eigentlich egal) an. Damit kannst du auch mehrere mögliche Übersetzungen leicht implementieren. Du hast dann zum beispiel eine Tabelle GermanToEnglish mit den Feldern German und English und mit der Abfrage "SELECT * FROM GermanToEnglish WHERE German='MeinSuchString'; und bekommst alle Eingetragenen übersetzungen.
Ein Speicherschonenderer Ansatz wäre, für jedes Wort nur einen Eintrag in der Liste zu haben und alle Übersetzungen mit Komma oä. separiert. Abfrage ist fast die gleiche (evtl noch ein LIMIT 1 dahinter), du musst dann nurnoch dein Ergebnis mit ![]() |
Re: Übersetzer - Ansatzprobleme
Ja, das klingt sehr gut.
So wird's getestet. Ich bin hier schon weiterführend fündig geworden. Noch ne andere Frage dazu: Nicht das ich jetzt extrem faul bin, aber kann jemande freie datenbanken empfehlen (gibt es welche?). Sie müssen nicht extrem groß sein. ich habe mir schon die von dict.cc (knapp 14mb) besorgt, aber die darf nicht weitergegeben werden und ist viel zu groß, da meine übersetzerfunktionen im normalen "use" rahmen sein dürfen. vielen dank und gruß :) |
Re: Übersetzer - Ansatzprobleme
Zitat:
Zitat:
Grundsätzlich ist ein 'Übersetzer' dieser Form jedoch nur als Vokabeltrainer zu gebrauchen. Ein Übersetzer muss ja auch noch das Zeugs verstehen, was er übersetzen soll, und da wird es dann schon etwas schwerer. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz