![]() |
Warum funktioniert mein Übersetzer nicht?
Ich wollte einen Übersetzer programmieren [Deutsch-Englisch](es sollen die deutschen Wörter unten nochmal vollständig angezeigt werden, nur ohne Umlaute), ich habe folgendes programmiert:
Delphi-Quellcode:
Aber wenn ich etwas eingebe, kommt nichts raus. Die Aufgabe war, dass alles ohne replace geschrieben werden soll.
procedure TForm4.Button1Click(Sender: TObject);
var englisch: TStringlist; W, satz : string; b,a,buchstabe: integer; begin w := edit1.Text; satz:=edit1.Text; englisch := TStringlist.create; if Satz[buchstabe]='Ü' then begin a:=Pos('Ü',W,a); Delete(w,b,a); insert('Ue',w, a); edit3.Text:= w; englisch.free; englisch.loadFromFile('D:\Übersetzer\Neu1.txt'); edit2.Text := (englisch.Values[W]); end else if Satz[buchstabe]='Ä' then begin a:=Pos('Ä',W,a); Delete(w, b, a); insert('Ae',w, a); edit3.Text:= w; englisch.free; englisch.loadFromFile('D:\Übersetzer\Neu1.txt'); edit2.Text := (englisch.Values[W]); end else if Satz[buchstabe]='Ö' then begin a:=Pos('Ö',W,a); Delete(w,b, a); insert('Oe',w, a); edit3.Text:= w; englisch.free; englisch.loadFromFile('D:\Übersetzer\Neu1.txt'); edit2.Text := (englisch.Values[W]); end else if Satz[buchstabe]='ß' then begin a:= Pos('ß',W,a); Delete(w,b, a); insert('ss',w, a); edit3.Text:= w; englisch.free; englisch.loadFromFile('D:\Übersetzer\Neu1.txt'); edit2.Text := (englisch.Values[W]); end else if Satz[buchstabe]='a''e''i''o''u' then begin edit3.Text:= w; englisch.free; englisch.loadFromFile('D:\Übersetzer\Neu1.txt'); w:=edit1.Text; end end. Danke schonmal im voraus! |
AW: Warum funktioniert mein Übersetzer nicht?
Und was passiert, wenn Du buchstabe vernünftig initialisierst bzw in einer Schleife benutzt?
|
AW: Warum funktioniert mein Übersetzer nicht?
Hallo und Willkommen in der DP :dp:,
1. Falsche Sparte, Du willst ja keine erarbeitete Lösung vorstellen, sondern hast ein Problem. 2. Benutze bitte in Zukunft keine Code- sondern Delphi-Tags (das ist der "Helm" im Editor) 3. Kompiliert der Code überhaupt? Zumindest die Zeile Zitat:
4. Du gibst Deine Stringliste frei und willst dann erst eine Datei hineinladen. |
AW: Warum funktioniert mein Übersetzer nicht?
hallo,
müsstest du nicht eine Zählschleife um dein Ersetzen programmieren, du prüfst mit
Delphi-Quellcode:
nur den ersten Buchstaben auf ein 'Ü'. Muss da nicht ein
if Satz[buchstabe]='Ü' then begin
Delphi-Quellcode:
rein.
For i:=0 to length(Satz) do begin
if Satz[i]='Ü' then begin ... end; mfg |
AW: Warum funktioniert mein Übersetzer nicht?
Zitat:
Zitat:
Danke!:thumb: |
AW: Warum funktioniert mein Übersetzer nicht?
Ja, mit Free gibst Du die Liste ja wieder frei, danach kannst Du sie nicht mehr benutzen, weil weg. Üblicherweise arbeitet man mit lokalen Instanzen so:
Delphi-Quellcode:
Dings := TDingsklasse.Create;
try Dings.MachIrgendwas; finally Dings.Free; end; |
Dieses Thema wurde am "25. Jan 2016, 15:25 Uhr" von "MrSpock" aus dem Forum "Neuen Beitrag zur Code-Library hinzufügen" in das Forum "Algorithmen, Datenstrukturen und Klassendesign" verschoben.
|
AW: Warum funktioniert mein Übersetzer nicht?
Ich habe es jetzt mal so geändert, aber es kommt dann immer wieder die Fehlermeldung "Zugriffsverletzung bei Adresse 005A8301 in Modul "Übersetzer"".
Kennt ihr den Fehler? |
AW: Warum funktioniert mein Übersetzer nicht?
Was hast du wie geändert?
|
AW: Warum funktioniert mein Übersetzer nicht?
Delphi-Quellcode:
unit UnÜbersetzer;
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, System.Actions, Vcl.ActnList, Vcl.ExtCtrls, Vcl.Menus; type TForm4 = class(TForm) Edit1: TEdit; edit2: TEdit; Button1: TButton; edit3: TEdit; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form4: TForm4; implementation {$R *.dfm} procedure TForm4.Button1Click(Sender: TObject); var englisch: TStringlist; W, satz : string; i, b,a,buchstabe: integer; begin w := edit1.Text; satz:=edit1.Text; englisch := TStringlist.create; a:=Pos('Ü',W,a); a:=Pos('Ä',W,a); a:=Pos('Ö',W,a); a:=Pos('ß',W,a); a:=Pos('a''e''i''o''u',W,a); try if Satz[buchstabe]='Ü' then begin a:=Pos('Ü',W,a); Delete(w,b,a); insert('Ue',w, a); edit3.Text:= w; englisch.loadFromFile('D:\Übersetzer\Neu1.txt'); edit2.Text := (englisch.Values[W]); end finally try if Satz[buchstabe]='Ä' then begin a:=Pos('Ä',W,a); Delete(w, b, a); insert('Ae',w, a); edit3.Text:= w; englisch.loadFromFile('D:\Übersetzer\Neu1.txt'); edit2.Text := (englisch.Values[W]); englisch.Free; end finally try if Satz[buchstabe]='Ö' then begin a:=Pos('Ö',W,a); Delete(w,b, a); insert('Oe',w, a); edit3.Text:= w; englisch.loadFromFile('D:\Übersetzer\Neu1.txt'); edit2.Text := (englisch.Values[W]); englisch.Free; end finally try if Satz[buchstabe]='ß' then begin a:= Pos('ß',W,a); Delete(w,b, a); insert('ss',w, a); edit3.Text:= w; englisch.loadFromFile('D:\Übersetzer\Neu1.txt'); edit2.Text := (englisch.Values[W]); englisch.Free; end finally if Satz[buchstabe]='a''e''i''o''u' then begin edit3.Text:= w; englisch.loadFromFile('D:\Übersetzer\Neu1.txt'); w:=edit1.Text; englisch.free; end end; end; end; end; end; end. |
AW: Warum funktioniert mein Übersetzer nicht?
Du gibst die Liste immer noch frühzeitig frei und deine try..finally Blöcke machen in der Form absolut gar keinen Sinn .. Den 10-fachen LoadFromFile() Aufruf kannst du dir btw. auch sparen. Einmal reicht.
|
AW: Warum funktioniert mein Übersetzer nicht?
Die Variable buchstabe ist immer noch nicht vernünftig initialisiert! Wie willst Du ein Zeichen verarbeiten, das nicht definiert ist? Erhältst Du dafür eigentlich keine Warnung, oder hast Du die ausgeschaltet?
|
AW: Warum funktioniert mein Übersetzer nicht?
Ich finde das Ganze auch ohne die Try-Finally-Blöcke ziemlich konfus. Vielleicht kannst du mal beschreiben, was genau du machen möchtest, bzw. was passieren soll?
Meine Vermutung: Nutzer gibt Wort ein und drückt Button. Dann sollen in dem Wort die Umlaute ersetzt werden? Dann soll das Wort in einer zu ladenden Liste nachgeschaut werden, um die Übersetzung zu finden? Diese dann ausgeben? |
AW: Warum funktioniert mein Übersetzer nicht?
Hallo,
z.B. hier
Delphi-Quellcode:
Wie sieht eigentlich deine Neu1.txt aus ?
englisch.free; // Variable wird freigegeben
englisch.loadFromFile('D:\Übersetzer\Neu1.txt'); // -> puff !!! Hier noch ein paar Hilfen: F5 - Breakpoint an der Cursorposition setzen/entfernen Strg+F5 - Variable am Cursor überwachen F7 - einen Schritt machen (steht der Cursor auf einer Methode, wird in die Methode reingesprungen) F8 - einen Schritt machen (steht der Cursor auf einer Methode, wird NICHT in die Methode reingesprungen) Heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:00 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-2025 by Thomas Breitkreuz