String überprüfen?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
roherter
Beiträge: 1407
Registriert: 10.04.2005 18:58
Kontaktdaten:

String überprüfen?

Beitrag von roherter »

Wie kann ich am besten ein string überprüfen so das ich weiß das er nur Zahlen von 0-9 und das dezimalzeichen enthält?

Bei PHP kann man das ganz einfach lösen nur bei PB fällts mir jetzt auf anhieb etwas schwer. :oops:
Purebasic 5.0 32bit und 64 bit

I'm back from hell
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Code: Alles auswählen

Procedure IsNum(string.s)
  Protected *char.character = @string
  If *char 
    While *char\c 
      Select *char\c
        Case '0' To '9', '.' , ','
          *char + SizeOf(character)
        Default
          ProcedureReturn #False
      EndSelect 
    Wend 
    ProcedureReturn #True
  EndIf  
  ProcedureReturn #False
EndProcedure

Debug IsNum("71.3")
Debug IsNum("2")
Debug IsNum("a")
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag von Tafkadasom2k5 »

Bin mir nicht sicher, aber gibt es nicht sowas wie "Findstring"? Oder "Instring"? Bin gerade bei der Arbeit und habe die PB-Hilfe nicht zur Hand, aber ansonsten könntest du mithilfe von "Instring" (o.Ä.) und einer For-Schleife die jeweiligen "CHR()"'s durchgehen, und bei "Instring" = 1 Alarm schlagen.

Guck einfach mal nach dem Befehl erstmal.

Gr33tz
Tafkadasom2k5

Edit:
Oder mache dein String-Gadget einfach "Numeric" ;)

EditEdit:
Habe diesen Code aus Urzeiten mal ausgegraben... vielleicht hilft dieser dir ja..?

Code: Alles auswählen

Procedure CheckCharsDetail(Eingabe.s,Notallowed.s)
 Details.s = ""
 Analyze.s = ""
 HowMany.l = 0
 
 For I=1 To Len(Eingabe.s)
    Analyze =  Mid(Eingabe,I,1)
   
    For A=1 To Len(Notallowed)
      If Analyze = Mid(Notallowed,A,1)
        If Details = ""
           Details = Details + Mid(Notallowed,A,1)
        Else
          Details = Details + "," + Mid(Notallowed,A,1)
        EndIf
       HowMany = HowMany + 1
      EndIf
    Next

  Next
 
  If HowMany > 0
    Debug HowMany
    Debug Details
    ProcedureReturn(HowMany)
  Else
    ProcedureReturn(0)
  EndIf
 
  EndProcedure

Eingabe.s = InputRequester("Eingabe","Wort eingeben das geprüft werden soll","")
Notallowed.s = InputRequester("Eingabe","Buchstaben eingeben, auf die das Wort geprüft werden soll (z.B. 'abcdefg123')","")

CheckCharsDetail(Eingabe,Notallowed) 
Zuletzt geändert von Tafkadasom2k5 am 20.09.2006 10:44, insgesamt 1-mal geändert.
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Benutzeravatar
roherter
Beiträge: 1407
Registriert: 10.04.2005 18:58
Kontaktdaten:

Beitrag von roherter »

Ich benutze ein Editorgadget wenn ich es auf numeric umschalte kann man keine Fließkommazahlen benutzen leider. :o

danke @edel
Purebasic 5.0 32bit und 64 bit

I'm back from hell
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

roherter hat geschrieben:Ich benutze ein Editorgadget wenn ich es auf numeric umschalte kann man keine Fließkommazahlen benutzen leider. :o

danke @edel
Dazu gibt es hier schon einiges. Boardsuche benutzen ...
Benutzeravatar
roherter
Beiträge: 1407
Registriert: 10.04.2005 18:58
Kontaktdaten:

Beitrag von roherter »

Deine Procedure reicht mir schon,thx. :allright:
Purebasic 5.0 32bit und 64 bit

I'm back from hell
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag von Tafkadasom2k5 »

Ich werde ignoriert...
:( bin ja schon ruhig... :cry:
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Tafkadasom2k5 hat geschrieben:Ich werde ignoriert...
:( bin ja schon ruhig... :cry:
Deins ist a bissel langsam :wink:
Ob meins schneller ist, als edel kann ja mal einer Testen, hab kein Case benutzt, sowie for next :wink:

Code: Alles auswählen

Procedure IsStringNum(String.s)
  Length = Len(String)
  Protected *Mem.Character = @String
  For I = 0 To Length - 1
    If *Mem\c < 48 Or *Mem\c > 57 ; keine Zahl
      If *Mem\c <> 46 ; auch kein dezimalpunkt
        ProcedureReturn #False
      EndIf
    EndIf
    *Mem + SizeOf(Character)
  Next
  ProcedureReturn #True
EndProcedure
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag von Tafkadasom2k5 »

ts-soft hat geschrieben:
Tafkadasom2k5 hat geschrieben:Ich werde ignoriert...
:( bin ja schon ruhig... :cry:
Deins ist a bissel langsam :wink:
Ja, weil es sich wirklich auf die Details bezieht (ich lasse mir ja auch ausgeben, welche Buchstaben in welcher Reihenfolge falsch auftauchen... ;) )

Nundenn... :allright:
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ts' und edels routinen haben aber eine schwachstelle:

sie liefern auch bei fehlerhaft mehreren dezimalzeichen ein "OK"..

Code: Alles auswählen

Procedure IsNum(string.s) 
  Protected *char.character = @string 
  If *char 
    While *char\c 
      Select *char\c 
        Case '0' To '9', '.' , ',' 
          *char + SizeOf(character) 
        Default 
          ProcedureReturn #False 
      EndSelect 
    Wend 
    ProcedureReturn #True 
  EndIf  
  ProcedureReturn #False 
EndProcedure 

Debug IsNum("71,323.7812,098") 
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten