![]() |
case of
hi,
dies ist mein zweiter thread in diesem forum und programmiert hab ich auch noch net viel. ich bin gerade bei der case of funktion und da haperts auch schon. Ich hab da ne aufgabe, wonach ich ein Programm erstellen soll welches nach der Eingabe von : &,%... 'Sonderzeichen' 1..10 'Zahl' a,e... 'Kleinbuchstabe' A,B... 'GrossBuchstabe' ausgbit. Mein erster Versuch sag wie folgt aus :
Delphi-Quellcode:
Vll kann mir ja jmd weiterhelfen.
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TZeichen = class(TForm) ein: TEdit; Label1: TLabel; Button1: TButton; Label2: TLabel; aus: TEdit; Button2: TButton; procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Zeichen: TZeichen; implementation {$R *.dfm} procedure TZeichen.Button2Click(Sender: TObject); begin close; end; procedure TZeichen.Button1Click(Sender: TObject); var zeichen, fehler :integer; ok :boolean; begin val ( ein.text, zeichen, fehler ) ; ok := (fehler=0) ; if ok then begin case zeichen of A..Z : ausgabe := 'Buchstabe' ; a..z : ausgabe := 'Kleinbuchstabe'; 1..10 : ausgabe := 'Zahl' ; '§','$','%' : ausgabe := 'Sonderzeichen'; end; aus.Text := ausgabe ; end; end; end. |
Re: case of
Hi,
Guck mal, du hast die Variable ZEICHEN als Integer deklariert und fragst ab, ob sie Buchstaben enthält. [Edit]Unsinn entfernt[/Edit] Nimm dir eine ASCII-Tabelle zur Hilfe und schaue mal nach, welche Werte z.B. die Großbuchstaben haben....das sollte dir weiterhelfen. MfG GM |
Re: case of
1. Das ist kein gemeinschaftsprojekt, das du planst. Das gehört in ein anderes Forum (eins der Delphi-Foren oben)
2. Zu deinem Problem: Groß-und Kleinbuchstaben unterscheidet Delphi so nicht ;) Was hälst du von dem Code:
Delphi-Quellcode:
Dieses Beispiel braucht nur einen Button und sollte das ganze verständlich machen :)
var
Form1: TForm1; a : integer = 0; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); begin a := a+1; //a wird immer um 1 erhöht case a of 1: ShowMessage ('a = 1'); // wenn a = 1 ist kommt diese Message 2: ShowMessage ('a = 2'); // gleiches, nur hier ist a = 2 3: begin ShowMessage ('a = 3'); // gleiches wenn a = 3 ist a := 0; // a wird auf 0 zurückgesetzt. Beim nächsten Klick ist es also 1 end; end; // case-Anwendungen werden mit einem end beendet end; Deine unit halte ich nämlich für etwas überkompliziert für einen Anfänger, der nur case lernen will ;) |
Re: case of
Ach ja, den AsciiWert eines Zeichens bekommst du nicht mit Val, sondern mir Ord.
|
Re: case of
Delphi-Quellcode:
ich habs auf die sonderzeichen beschraenkt. ich hab ch als char deklariert aber nun gibt er mir einfach nichts aus, :/
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var ch :char; aus :string[30]; begin case ch of '"','§','$','%' : aus := 'Sonderzeichen' ; end; edit2.Text := aus ; end; end. edit: und wie funktioniert so eine angabe mit ord ? |
Re: case of
Case verlangt einen Ordinalen Typen!
Delphi-Quellcode:
case Ord(Buchstabe) of {hier Asciiwert des Zeichens zurückgeben lassen}
111..123: bla bla; {hier prüfen, ob asciiwert in einem bestimmten Bereich steht(Sonderzeichen, Großbuchstaben, etc) ...siehe AsciiTabelle} end; bzw. hier ein einfaches Beispiel :
Delphi-Quellcode:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin case ord(key) of 100..200: showmessage('ein Zeichen aus 100 bis 200 gedrückt....'); 32: showmessage('Leertaste gedrückt'); end; end; |
Re: case of
Hallo inst666,
erstens musst du nicht jedes Mal die Komplette Unit posten, die relevante Prozedur/Funktion reicht eigentlich aus. Nun zu deinem ersten Code:
Delphi-Quellcode:
Du versuchst hier, den Text der im Edit "ein" eingegeben wurde, in eine Zahl umzuwandeln. Nachdem du aber auch mit der Eingabe von Buchstaben rechnest, wird fehler jedes Mal ungleich 0 sein.
procedure TZeichen.Button1Click(Sender: TObject);
var zeichen, fehler :integer; ok :boolean; begin val ( ein.text, zeichen, fehler ) ; ok := (fehler=0) ; if ok then begin case zeichen of A..Z : ausgabe := 'Buchstabe' ; a..z : ausgabe := 'Kleinbuchstabe'; 1..10 : ausgabe := 'Zahl' ; '§','$','%' : ausgabe := 'Sonderzeichen'; end; aus.Text := ausgabe ; end; end; Es geht aber viel einfacher:
Delphi-Quellcode:
In der Case-Abfrage fragen wir ab, ob es sich um einen Grossbuchstaben, einen Kleinbuchstaben oder eine Ziffer handelt. Dabei darf zwischen den Hochkommas immer nur ein Zeichen vorkommen. Der else-Zweig tritt ein, falls keine der vorherigen Bedingungen wahr sind. Wir nehmen in dem Fall an, dass es sich um ein Sonderzeichen handelt. Ich hoffe der Code verdeutlicht die Verwendung von case ein bisschen..
procedure TZeichen.Button1Click(Sender: TObject);
var ausgabe: String; begin if Length(ein.Text) = 0 then //Wenn kein Text eingegeben wurde, geben wir eine Fehlermeldung aus ausgabe := 'Kein Text eingegeben!' else //sonst sehen wir nach was los ist begin case ein.Text[1] of //im Moment interessiert uns nur das erste Zeichen 'A'..'Z': ausgabe := 'Grossbuchstabe'; 'a'..'z': ausgabe := 'Kleinbuchstabe'; '0'..'9': ausgabe := 'Ziffer'; else ausgabe := 'Sonderzeichen'; end; end; ShowMessage(ausgabe); //wir geben den Text aus end; Greetz alcaeus |
DP-Maintenance
Dieses Thema wurde von "Christian Seehase" von "Projekte" nach "Sonstige Fragen zu Delphi" verschoben.
Es geht nicht um ein Projekt. |
Re: case of
Ups.... :oops:
Alcaeus hat natürlich recht ...char ist auch nen Ordinaler Typ. *imbodenversink* |
Re: case of
@alcaeus: Die Variable "Ausgabe" und die letzte Zeile kann man sich im Grunde sparen, wenn man's gleich so macht:
Delphi-Quellcode:
Edit: hab alle "Edit1" 's durch "ein" 's ersetzt... hatte ich bei mir anders zum testen, ohne den Namen des Editfelds ändern zu müssen ;)
procedure TForm1.Button1Click(Sender: TObject);
begin if Length(ein.Text) = 0 then //Wenn kein Text eingegeben wurde, geben wir eine Fehlermeldung aus ShowMessage('Kein Text eingegeben!') else //sonst sehen wir nach was los ist begin case ein.Text[1] of //im Moment interessiert uns nur das erste Zeichen 'A'..'Z': ShowMessage('Grossbuchstabe'); 'a'..'z': ShowMessage('Kleinbuchstabe'); '0'..'9': ShowMessage('Ziffer'); else ShowMessage('Sonderzeichen'); end; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:15 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