Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Warum funktioniert mein Übersetzer nicht? (https://www.delphipraxis.net/188026-warum-funktioniert-mein-uebersetzer-nicht.html)

Phillip0405 25. Jan 2016 13:56

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:
 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.
Aber wenn ich etwas eingebe, kommt nichts raus. Die Aufgabe war, dass alles ohne replace geschrieben werden soll.

Danke schonmal im voraus!

gammatester 25. Jan 2016 14:02

AW: Warum funktioniert mein Übersetzer nicht?
 
Und was passiert, wenn Du buchstabe vernünftig initialisierst bzw in einer Schleife benutzt?

DeddyH 25. Jan 2016 14:04

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:

Delphi-Quellcode:
else if Satz[buchstabe]='a''e''i''o''u' then begin

sieht schon irgendwie komisch aus.
4. Du gibst Deine Stringliste frei und willst dann erst eine Datei hineinladen.

frankyboy1974 25. Jan 2016 14:07

AW: Warum funktioniert mein Übersetzer nicht?
 
hallo,

müsstest du nicht eine Zählschleife um dein Ersetzen programmieren, du prüfst mit

Delphi-Quellcode:
   if Satz[buchstabe]='Ü' then begin
nur den ersten Buchstaben auf ein 'Ü'. Muss da nicht ein

Delphi-Quellcode:
For i:=0 to length(Satz) do begin
  if Satz[i]='Ü' then begin
...
end;
rein.

mfg

Phillip0405 25. Jan 2016 14:14

AW: Warum funktioniert mein Übersetzer nicht?
 
Zitat:

Zitat von DeddyH (Beitrag 1328123)
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)

Danke für den Hinweis!
Zitat:

Zitat von DeddyH (Beitrag 1328123)
4. Du gibst Deine Stringliste frei und willst dann erst eine Datei hineinladen.

Muss das andersherum?

Danke!:thumb:

DeddyH 25. Jan 2016 14:17

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;

DP-Maintenance 25. Jan 2016 14:25

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.

Phillip0405 25. Jan 2016 14:29

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?

baumina 25. Jan 2016 14:53

AW: Warum funktioniert mein Übersetzer nicht?
 
Was hast du wie geändert?

Phillip0405 25. Jan 2016 15:12

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.

Zacherl 25. Jan 2016 15:28

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.

gammatester 25. Jan 2016 15:31

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?

Jumpy 25. Jan 2016 15:33

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?

hoika 25. Jan 2016 15:42

AW: Warum funktioniert mein Übersetzer nicht?
 
Hallo,

z.B. hier

Delphi-Quellcode:
englisch.free; // Variable wird freigegeben
englisch.loadFromFile('D:\Übersetzer\Neu1.txt'); // -> puff !!!
Wie sieht eigentlich deine Neu1.txt aus ?

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:37 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz