Parser

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

BigSnake

Betreff: Parser

BeitragDo, Dez 25, 2003 12:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Für alle die für ihre Programme eine Skript Sprache oder komplexere Konfigurationszeilen benutzen wollen hier eine kleine Parser FUnktion. Sie liefert einen beliebigen Parameter aus einem String zurück.
Als Trennzeichen wird das Leerzeichen verwendet. Will man Strings mit Leerzeichen als Parameter benutzen müssen jene zwischen <> stehen.

Beispiel
BEFEHL PARAMETER1 PARAMETER2 <STRING PARAMETER 3>

Code: [AUSKLAPPEN]


Const ERR_000$ = "INDEX NOT FOUND"

Function ProgramGetParameter$(LineString$, IndexNumber%)
   Local Index%      ; Aktueller Index
   Local Char%         ; Aktuelles Zeichen
   Local CurStr$      ; Aktueller String
   Local InString%      ; Flag, ob sich der Parser innerhalb eines String Parameters befindet
   
   Index = 0
   CurStr = ""
   InString = False
   
   For Char = 1 To Len(LineString) Step 1
      ; Geht den String Zeichen für Zeichen durch. Wird ein Leerzeichen
      ; gefunden, so wird Index inkrementiert. Entspricht Index dem
      ; gesuchtem Wert, so wird der String zurückgegeben
      ; Strings innerhalb einer Befehlzeile können auch Leerzeichen
      ; enthalten. Sie stehen zwischen < und >
      If (Mid(LineString,Char,1) = " ") Or (Char = Len(LineString)) Then
         If Not InString Then
            Index = Index + 1
            If Index = IndexNumber Then
               If Char = Len(LineString) Then
                  CurStr = CurStr + Mid(LineString,Char,1)
               EndIf
               Return CurStr
            Else
               CurStr = ""
            EndIf
         Else
            ; Befindet sich innerhalb eines String Parameters
            If Char = Len(LineString) Then
               ; Ist damit der korrekte Index erreicht
               Index = Index + 1
               If Index = IndexNumber Then
                  Return CurStr
               EndIf
            Else
               CurStr = CurStr + Mid(LineString,Char,1)
            EndIf
         EndIf
      ElseIf Mid(LineString,Char,1) = "<" Then
         ; String beginnt
         InString = True
      ElseIf Mid(LineString,Char,1) = ">" Then
         ; String endet
         InString = False
         ; Ist damit auch der String zu Ende ?         
      Else
         CurStr = CurStr + Mid(LineString,Char,1)
      EndIf
   Next
   
   Return ERR_000
End Function

Vulture

BeitragSo, Jan 04, 2004 0:59
Antworten mit Zitat
Benutzer-Profile anzeigen
naja was soll ich sagen geht irrgenwie nicht ?!
User posted image
Projekte : TerraSE Terranigma - Break Up - Final Round - Survivor Elite - Sequence Basic

BigSnake

BeitragDo, Jan 08, 2004 18:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Was soll ich sagen : Funktioniert einwandfrei !

Code: [AUSKLAPPEN]

Const ERR_000$ = "INDEX NOT FOUND"

; --------------------------------------------------------------------------------
; Hauptprogramm

Global Eingabe$
Global Par

Repeat
   Eingabe = Input("Text : ")
   Par = Input("Gewünschter Parameter : ")
   Print ProgramGetParameter(Eingabe,Par)
Until KeyHit(1)

End

; --------------------------------------------------------------------------------

Function ProgramGetParameter$(LineString$, IndexNumber%)
   Local Index%      ; Aktueller Index
   Local Char%         ; Aktuelles Zeichen
   Local CurStr$      ; Aktueller String
   Local InString%      ; Flag, ob sich der Parser innerhalb eines String Parameters befindet
   
   Index = 0
   CurStr = ""
   InString = False
   
   For Char = 1 To Len(LineString) Step 1
      ; Geht den String Zeichen für Zeichen durch. Wird ein Leerzeichen
      ; gefunden, so wird Index inkrementiert. Entspricht Index dem
      ; gesuchtem Wert, so wird der String zurückgegeben
      ; Strings innerhalb einer Befehlzeile können auch Leerzeichen
      ; enthalten. Sie stehen zwischen < und >
      If (Mid(LineString,Char,1) = " ") Or (Char = Len(LineString)) Then
         If Not InString Then
            Index = Index + 1
            If Index = IndexNumber Then
               If Char = Len(LineString) Then
                  CurStr = CurStr + Mid(LineString,Char,1)
               EndIf
               Return CurStr
            Else
               CurStr = ""
            EndIf
         Else
            ; Befindet sich innerhalb eines String Parameters
            If Char = Len(LineString) Then
               ; Ist damit der korrekte Index erreicht
               Index = Index + 1
               If Index = IndexNumber Then
                  Return CurStr
               EndIf
            Else
               CurStr = CurStr + Mid(LineString,Char,1)
            EndIf
         EndIf
      ElseIf Mid(LineString,Char,1) = "<" Then
         ; String beginnt
         InString = True
      ElseIf Mid(LineString,Char,1) = ">" Then
         ; String endet
         InString = False
         ; Ist damit auch der String zu Ende ?         
      Else
         CurStr = CurStr + Mid(LineString,Char,1)
      EndIf
   Next
   
   Return ERR_000
End Function

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group