Autor Beitrag
HashProt
Hält's aus hier
Beiträge: 3



BeitragVerfasst: So 21.12.08 18:26 
Hab hier n prüf Algorithmus gemacht der testen soll ob ein Char die Zahl 0 oder 1 oder 2,...,9 enthält.
Ich mach das über ASCII, also muss der Wert zwischen 47 (/) oder 57 (:) liegen.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
function TVLInt.Possible(test:Byte):Boolean;
begin
  If test>47 and test<57 then //über ASCII-Tabelle prüfen
  result:=true
  else
  result:=false;
end;


Da liefert aber der Compiler die Meldung:

[Fehler] mTVLInt.pas(124): Inkompatible Typen

//124 ist die Zeile im Programm, also hier im Code Zeile 3

Für Alternative Algorithmen wär ich auch dankbar, weil ich denke das über ASCII zu machen ist schon sehr grob^^
Kroko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1284

W98 W2k WXP
Turbo D
BeitragVerfasst: So 21.12.08 18:29 
einfach in klammern setzen

_________________
Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
Kroko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1284

W98 W2k WXP
Turbo D
BeitragVerfasst: So 21.12.08 18:29 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
function TVLInt.Possible(test:Byte):Boolean;
begin
  Result := (test>47and (test<57);
end;
oder so

_________________
Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 21.12.08 18:33 
Oder
ausblenden Delphi-Quelltext
1:
2:
3:
4:
function TVLInt.Possible(test:Byte):Boolean;
begin
  Result := test in [48..56];
end;
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: So 21.12.08 18:43 
Da Du prüfst, ob der ASCII-Wert eines Bytes einer Ziffer entspricht, würde ich das auch genauso im Code darstellen (selbstdokumentierender Code):
ausblenden Delphi-Quelltext
1:
2:
3:
4:
Function IsAsciiDigit (aByte : Byte) : Boolean;
Begin
  Result := Chr (aByte) in ['0'..'9'];
End;

_________________
Na denn, dann. Bis dann, denn.
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 21.12.08 18:47 
Dann übergib doch gleich das Zeichen als Zeichen.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
Function IsAsciiDigit (aChar : Char) : Boolean;
Begin
  Result := aChar in ['0'..'9'];
End;
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: So 21.12.08 20:18 
Hi :)

Diese Ver5sion ist eindeutig Vorzuziehen: Das wichtigste beim Programmieren ist, dass jeder, der deinen Quelltext liest, sieht, was du machst. Deshalb ist ['0'..'9'] in jedem Fall gegenüber [47..57] vorzuziehen. Diese Variante ist auch in keiner Weise langsamer oder so, einfach besser lesbar.

mfG,

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: So 21.12.08 20:32 
user profile iconDeddyH hat folgendes geschrieben Zum zitierten Posting springen:
Dann übergib doch gleich das Zeichen als Zeichen.
Er liest Bytes ein (jedenfalls habe ich das so verstanden) und will Bytes irgendwie verarbeiten. Weshalb dann einer Funktion dann ein Char übergeben werden soll, würde ich dann nicht verstehen. Aber klar, kommt eh auf den Kontext an.

_________________
Na denn, dann. Bis dann, denn.
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 21.12.08 20:46 
Zitat:
Hab hier n prüf Algorithmus gemacht der testen soll ob ein Char die Zahl 0 oder 1 oder 2,...,9 enthält.
Ich mach das über ASCII, also muss der Wert zwischen 47 (/) oder 57 (:) liegen.

In dem Kontext finde ich Char angebrachter. Aber ist eh Sache des TE, wie er seine Daten interpretieren will.
HashProt Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: So 21.12.08 20:56 
Danke für die zahlreichen Antworten. Mal schauen welche der Möglichkeiten am besten passt.