Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
TKRoth
Beiträge: 32 Registriert: 24.02.2012 15:34
Wohnort: Hamburg
Kontaktdaten:
Beitrag
von TKRoth » 15.11.2014 09:30
Mit dieser Routinen lassen sich Zahlen prüfen, welche als String übergeben werden:
Code: Alles auswählen
EnableExplicit
Structure CharacterArray
StructureUnion
c.a[0]
EndStructureUnion
EndStructure
Procedure.w IsNumeric(St.s)
Protected *String.CharacterArray=@St
Protected Cnt.l,Length.l=MemoryStringLength(*String,#PB_Ascii)
Protected Pt.w,e.w
Select *String\c[0]
Case Asc("+"),Asc("-") :Cnt=1:
Case Asc(".") :Cnt=1:Pt=#True
EndSelect:If Length=Cnt:ProcedureReturn #False:EndIf
Repeat
Select *String\c[Cnt]
Case Asc("0") To Asc("9") :Cnt+1:Continue
Case Asc(".") :If Pt:ProcedureReturn #False:Else:Pt=#True:Cnt+1:Continue:EndIf
Case Asc("e"),Asc("E")
If e
ProcedureReturn #False
Else
Cnt+1:Select *String\c[Cnt]
Case Asc("+"),Asc("-"),Asc("0") To Asc("9"):e=#True:Cnt+1
Default:ProcedureReturn #False
EndSelect
EndIf
Default:ProcedureReturn #False
EndSelect
Until Length=Cnt:ProcedureReturn #True
EndProcedure
Debug "Zahlen"
Debug IsNumeric("123")
Debug IsNumeric("17.3")
Debug IsNumeric("-14.8")
Debug IsNumeric(".67")
Debug IsNumeric("45e11")
Debug IsNumeric("1.7e-6")
Debug IsNumeric("-65e-4")
Debug ""
Debug "Keine Zahlen"
Debug IsNumeric("45Alpha")
Debug IsNumeric("1...2...3...Meins")
Debug IsNumeric("PureBasic")
Computer werden benötigt um Probleme zu lösen die man ohne Computer nicht hätte.
STARGÅTE
Kommando SG1
Beiträge: 6999 Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:
Beitrag
von STARGÅTE » 15.11.2014 11:57
Es sind halt wieder ein paar Monate um, seit dem letzten IsNumeric ^^
Ein paar Hinweise:
Du kannst deine Asc("+") usw. durch '+' ersetzen, das ist in PB nämlich das äquivalent dazu.
Hat es ein Grund warum deine Prozedur eine Word zurück gibt?
Dein Code funktioniert nicht unter Unicode!
Zahlen
1
1
0
0
1
1
0
Keine Zahlen
1
1
0
Liegt vermutlich daran, dass deine Characters in wirklichkeit mit .a definiert sind.
Bitte zu .c korrigieren und dass du MemoryStringLength(*String,#PB_Ascii) benutzt.
Die länge deines Strings (in Zeichen) bekommst du mit Len(St.s)
Geänderte Version:
Code: Alles auswählen
EnableExplicit
Structure CharacterArray
StructureUnion
c.c[0]
EndStructureUnion
EndStructure
Procedure.i IsNumeric(St.s)
Protected *String.CharacterArray=@St
Protected Cnt.i,Length.i=Len(St.s)
Protected Pt.i,e.i
Select *String\c[0]
Case '+', '-' :Cnt=1:
Case '.' :Cnt=1:Pt=#True
EndSelect:If Length=Cnt:ProcedureReturn #False:EndIf
Repeat
Select *String\c[Cnt]
Case '0' To '9' :Cnt+1:Continue
Case '.' :If Pt:ProcedureReturn #False:Else:Pt=#True:Cnt+1:Continue:EndIf
Case 'e','E'
If e
ProcedureReturn #False
Else
Cnt+1:Select *String\c[Cnt]
Case '+','-','0' To '9':e=#True:Cnt+1
Default:ProcedureReturn #False
EndSelect
EndIf
Default:ProcedureReturn #False
EndSelect
Until Length=Cnt:ProcedureReturn #True
EndProcedure
Debug "Zahlen"
Debug IsNumeric("123")
Debug IsNumeric("17.3")
Debug IsNumeric("-14.8")
Debug IsNumeric(".67")
Debug IsNumeric("45e11")
Debug IsNumeric("1.7e-6")
Debug IsNumeric("1.1")
Debug ""
Debug "Keine Zahlen"
Debug IsNumeric("45Alpha")
Debug IsNumeric("1...2...3...Meins")
Debug IsNumeric("PureBasic")
TKRoth
Beiträge: 32 Registriert: 24.02.2012 15:34
Wohnort: Hamburg
Kontaktdaten:
Beitrag
von TKRoth » 15.11.2014 12:54
@CodeCommander: Aber keine beherrschte die wissenschaftliche Darstellung.
@Stargate: Danke für die Änderung. Unter Unicode habe ich es noch nicht getestet, da ich das eigentlich nicht verwende.
Computer werden benötigt um Probleme zu lösen die man ohne Computer nicht hätte.
PMV
Beiträge: 2765 Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg
Beitrag
von PMV » 15.11.2014 15:47
TKRoth hat geschrieben: @CodeCommander: Aber keine beherrschte die wissenschaftliche Darstellung.
@Stargate: Danke für die Änderung. Unter Unicode habe ich es noch nicht getestet, da ich das eigentlich nicht verwende.
Tipp: In absehbarer Zeit wird nur noch Unicode unterstützt. Also besser direkt damit Programmieren.
alte Projekte:
TSE ,
CWL , Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-