Autor Beitrag
somebody
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 167
Erhaltene Danke: 2



BeitragVerfasst: Sa 23.02.08 18:43 
Hallo Leute, ich habe folgendes Problem.
Wir müssen für die Schuele ein Programm schreiben, was umlaute und die SOnderzeichen die man über die Tastatur eingeben kann ändert, also ä in ae ö in oe... und ! in eine Lücke, " in eine Lücke...
Das funktioniert auch schon fast.

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:
23:
24:
25:
26:
27:
function TForm1.umlaute(um: string): string;
var i: integer;
begin
     um := lowercase(um);

     for i := 1 to length(um) do
     begin
          case um[i] of
               'ä': um := 'ae';
               'ö': um := 'oe';
               'ü': um := 'ue';
               'ß': um := 'ss';
               '!': um := ' ';
               '"': um := ' ';
               '§': um := ' ';
               '$': um := ' ';
               '%': um := ' ';
               '&': um := ' ';
               '/': um := ' ';
               '(': um := ' ';
               ')': um := ' ';
               '=': um := ' ';
               '?': um := ' ';
          end;
     end;
     umlaute := um;
end;


Und in der Buttonklick Procedure steht

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.Button6Click(Sender: TObject);
begin
     umlau := edit6.text;
     panel6.caption := umlaute(umlau);
end;


So, wenn ich nun auf den Button klicke, und ein Umlaut oder Sonderzeichen eingegeben habe, dann wird nur die veränderung ausgegeben.
Ich habe es auch schon so versucht

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:
23:
24:
25:
26:
27:
function TForm1.umlaute(um: string): string;
var i: integer;
begin
     um := lowercase(um);

     for i := 1 to length(um) do
     begin
          case um[i] of
               'ä': um[i] := 'ae';
               'ö': um[i] := 'oe';
               'ü': um[i] := 'ue';
               'ß': um[i] := 'ss';
               '!': um[i] := ' ';
               '"': um[i] := ' ';
               '§': um[i] := ' ';
               '$': um[i] := ' ';
               '%': um[i] := ' ';
               '&': um[i] := ' ';
               '/': um[i] := ' ';
               '(': um[i] := ' ';
               ')': um[i] := ' ';
               '=': um[i] := ' ';
               '?': um[i] := ' ';
          end;
     end;
     umlaute := um;
end;


Mit der gleichen Buttonklick Procedure, aber dann kommt die Fehlermeldung:

Inkompatible Typen: 'Char' und 'String'

Könntet ihr mir vielleicht helfen, wie es anders geht.

mfg:Somebody
jakobwenzel
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1889
Erhaltene Danke: 1

XP home, ubuntu
BDS 2006 Prof
BeitragVerfasst: Sa 23.02.08 19:02 
um[i] ist ein Char, also ein einzelnes Zeichen. Und ein Zeichen kann nicht 2 Zeichen sein.
Lösung: Nimm Replace.
Allerdings sollte dann deine Schleife rückwärts laufen, da sich die Zeichennummern verschieben und sonst zu ersetzende Umlaute am Ende nicht mehr ersetzt werden, wenn vorher schon ein Umlaut kam.

_________________
I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
somebody Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 167
Erhaltene Danke: 2



BeitragVerfasst: Sa 23.02.08 19:22 
OK, das wäre eine ösung, nur jetzt ist das Problem unser Lehrer will, dass wir das mit case machen. Gibt es nicht eine Möglichkeit den neu berechneten 2-Zeichen String an den schon vorhanden alten string dranzuhängen. Also nicht den, der im edit stehet, weil dann die sonderzeichen und umlaute noch mit kommen, dann wird nämlcih die eingabe:

hällo

zu

häaello

Das habe ich auch schon ausprobiert. Also gibt es da eine Lösung für?
Calculon
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 676

Win XP Professional
Delphi 7 PE, Delphi 3 PRO
BeitragVerfasst: Sa 23.02.08 19:28 
Dann schau' dir mal die Befehle delete und insert an.

Gruß

Calculon
--

_________________
Hallo Mutti
somebody Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 167
Erhaltene Danke: 2



BeitragVerfasst: Sa 23.02.08 19:32 
Ja, das sind auch alles möglichkeiten aber es soll NUR mit case und evtl. lowercase gemacht werden.

EDIT: Ich habe jetzt nochmal ein bisschen herumprobiert und jetzt geht es. Gelöst habe ich es jetzt so:
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:
function umlaute(um: string): string;
var i: integer;
aktuell:string;
zw:string;
begin
     um := lowercase(um);
     zw := '';

     for i := 1 to length(um) do
     begin
            aktuell := um[i];
            case aktuell[1] of
               'ä': aktuell := 'ae';
               'ö': aktuell := 'oe';
               'ü': aktuell := 'ue';
               'ß': aktuell := 'ss';
               '!': aktuell := ' ';
               '"': aktuell := ' ';
               '§': aktuell := ' ';
               '$': aktuell := ' ';
               '%': aktuell := ' ';
               '&': aktuell := ' ';
               '/': aktuell := ' ';
               '(': aktuell := ' ';
               ')': aktuell := ' ';
               '=': aktuell := ' ';
               '?': aktuell := ' ';
          end;
          zw := zw + aktuell;
     end;

     umlaute := zw;
end;


Aber trotzdem danke für eure gemacht mühe mir zu helfen.