Scanner

Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Neue Antwort erstellen

DAK

Betreff: Scanner

BeitragDi, Jul 23, 2013 15:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Scanner-Klasse ist ein Teil der Java-Standardbibliothek, der verwendet wird, um Strings zu verarbeiten. Konkret erlaubt sie es, einen oder mehrere Delimiter zu definieren, anhand der der Text zerlegt wird.

BlitzMax: [AUSKLAPPEN]


SuperStrict
Framework BRL.StandardIO
Import BRL.Retro

Type TScanner
Field text:String
Field delimiter:String[]
Field lastpos:Int
Field nextexists:Int

Function Create:TScanner(text:String, delimiter:String[]=Null)
Local scanner:TScanner = New TScanner
If delimiter=Null Then delimiter = [" "]
scanner.text = text
scanner.delimiter = delimiter
scanner.lastpos = 0
scanner.nextexists = False
For Local i:Int=0 To scanner.delimiter.length-1
If (Instr(scanner.text,scanner.delimiter[i],scanner.lastpos)) Then scanner.nextexists = True
Next
Return scanner
End Function

Method hasNext:Int()
Return nextexists
End Method

Method getNext:String()
If (nextexists) Then
Local nextpos:Int=2147483647
For Local i:Int=0 To delimiter.length-1
Local in:Int = Instr(text,delimiter[i],lastpos+1)
If (in>0 And in<nextpos) Then nextpos=in
Next
If nextpos=2147483647 Then
nextexists=False
Return Right(text,Len(text)-lastpos)
Else
nextexists=True
Local out:String = Mid(text,lastpos+1,nextpos-lastpos-1)
lastpos = nextpos
Return out
EndIf
Else
Return Null
EndIf
End Method

Method getNextInt:Int()
Return Int(getNext())
End Method

Method getNextFloat:Float()
Return Float(getNext())
End Method

Method getNextShort:Short()
Return Short(getNext())
End Method

Method getNextByte:Byte()
Return Byte(getNext())
End Method

Method getNextLong:Long()
Return Long(getNext())
End Method

Method getNextDouble:Double()
Return Double(getNext())
End Method

Method setDelimiter(delimiter:String[])
Self.delimiter = delimiter
End Method
End Type

Local scanner:TScanner = TScanner.Create("1 21314.14 1221 1342")
While scanner.hasNext()
Print scanner.getNextFloat()
Wend

scanner:TScanner = TScanner.Create("Das ist ein Test")
While scanner.hasNext()
Print scanner.getNext()
Wend

scanner:TScanner = TScanner.Create("Das/ist/ein/zweiter?Test?oder?",["/","?"])
While scanner.hasNext()
Print scanner.getNext()
Wend


Verwendung:
Erstellen des Scanners mit TScanner.Create(text, delimiter)
Der Delimiter ist standardmäßig auf " " gestellt, also Leerzeichen. Delimiter müssen als String-Array eingegeben werden.

hasNext() gibt aus, ob es noch weitere Tags gibt.
getNext() gibt den nächsten Tag als String aus.
getNext<Variablentyp>() gibt den nächsten Tag als Wert im gewählten Variablentypen aus.

Die getNext()-Funktion gibt null zurück, wenn nichts mehr da ist.
Gewinner der 6. und der 68. BlitzCodeCompo

Xeres

Moderator

BeitragDi, Jul 23, 2013 18:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Hast du hierbei bewusst auf Split verzichtet?
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group