Parser
Übersicht BlitzBasic Codearchiv
BigSnakeBetreff: Parser |
Do, Dez 25, 2003 12:45 Antworten mit Zitat |
|
---|---|---|
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 |
So, Jan 04, 2004 0:59 Antworten mit Zitat |
|
---|---|---|
naja was soll ich sagen geht irrgenwie nicht ?! | ||
User posted image
Projekte : TerraSE Terranigma - Break Up - Final Round - Survivor Elite - Sequence Basic |
BigSnake |
Do, Jan 08, 2004 18:06 Antworten mit Zitat |
|
---|---|---|
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 |
||
Übersicht BlitzBasic Codearchiv
Powered by phpBB © 2001 - 2006, phpBB Group