Code: Alles auswählen
; Wie FindString, nur das dir Position angegeben wird, wo der String zum FindStringAnzahl-Male auftritt
; Bsp:
; Debug FindStringEx("Du bist Boris !!! Oder etwa nicht ?", " ", 1, 2)
; ; DerRückgabewert sollte 3 sein
Procedure.l FindStringEx(String$, StringToFind$, StartPosition, FindStringAnzahl)
Protected Pos
Pos = StartPosition
For S1=1 To FindStringAnzahl
If FindString(String$, StringToFind$, Pos)
Pos + FindString(String$, StringToFind$, Pos) - Pos
Else
Pos = 0
Break
EndIf
Next
ProcedureReturn Pos
EndProcedure
; Fügt an der gegebenen Position den Patch$ in den String$ ein. Alle danach kommenden Zeichen werden überschrieben.
Procedure.s PatchString(String$, Pos, Patch$)
ProcedureReturn Left(String$, Pos)+Patch$+Right(String$, Len(String$)-Pos-Len(Patch$))
EndProcedure
; Fügt an der gegebenen Position den Pach$ in den String$ ein. Alle danach kommenden Zeichen werden angehängt.
Procedure.s AddString(String$, Pos, Add$)
ProcedureReturn Left(String$, Pos)+Add$+Right(String$, Len(String$)-Pos)
EndProcedure
;{ TrimEx
;/ Syntax:
; TrimEx(String$, Zeichen.c = ' ', Mode = #XTC_TrimEx_Mode_Mid)
;/ Aenliche Befehle:
; Trim(...) ;/ PB-Standart-Befehl seit Version 3.20 (9. Juni 2002)
;/ Beschreibung:
; Entfernt alle Zeichen des in Parameter Zeichen.c (standart ' ' bzw.
; Leerzeicehn) angegebenen Zeichen am wahlweise rechten, linken oder
; rechts und links.
;/ Parameter:
; String$
; Der String, an dem das Zeichen (Parameter Zeichen.c = ' ') an den
; Rändern abgeschnitten wurde.
; Zeichen.c = ' '
; Das Zeichen, das am Rechten, linken oder rechten und linken Rand
; abgeschnitten werden soll.
; Mode(.b oder Enumertation 'XTC_TrimEx_Mode_*') = #XTC_TrimEx_Mode_Mid
; Der Modus des Abschneidens. Kann folgende angaben haben:
CompilerIf Defined(XTC_TrimEx_Mode_Mid, #PB_Constant) = #False; Or Defined(XTC_TrimEx_Mode_Left, #PB_Constant) = #False Or Defined(XTC_TrimEx_Mode_Right, #PB_Constant) = #False
Enumeration -1 ; XTC_TrimEx_Mode_*
#XTC_TrimEx_Mode_Mid ; Das Zeichen (Parameter Zeichen.c = ' ') wird am linken und rechten Rand abgeschnitten (standart)
#XTC_TrimEx_Mode_Left ; Das Zeichen (Parameter Zeichen.c = ' ') wird am linken Rand abgeschnitten
#XTC_TrimEx_Mode_Right ; Das Zeichen (Parameter Zeichen.c = ' ') wird am rechten Rand abgeschnitten
EndEnumeration
CompilerEndIf
;/ Rueckgabewert(.s oder $):
; Gibt den String bearbeitet zurück.
Procedure$ TrimEx(String$, Zeichen.c = ' ', Mode.b = #XTC_TrimEx_Mode_Mid)
Protected S1.l
If Mode = #XTC_TrimEx_Mode_Left ; Left (vorne) abschneiden
For S1 = 1 To Len(String$)
If Left(String$,1) = Chr(Zeichen)
String$ = Right(String$, Len(String$) -1)
EndIf
Next
ElseIf Mode = #XTC_TrimEx_Mode_Right ; Right (hinten) abschneiden
For S1 = 1 To Len(String$)
If Right(String$,1) = Chr(Zeichen)
String$ = Left(String$, Len(String$) -1)
EndIf
Next
Else;If Mode = #XTC_TrimEx_Mode_Mid ; Left (vorne) und Right (hinten) abschneiden
For S1 = 1 To Len(String$)
If Left(String$,1) = Chr(Zeichen)
String$ = Right(String$, Len(String$) -1)
EndIf
Next
For S1 = 1 To Len(String$)
If Right(String$,1) = Chr(Zeichen)
String$ = Left(String$, Len(String$) -1)
EndIf
Next
EndIf
ProcedureReturn String$
EndProcedure
;/ Anwendungsbeispiel
;Debug TrimEx("-----Text-String------",'-',#XTC_TrimEx_Mode_Left)
;Debug TrimEx("-----Text-String------",'-',#XTC_TrimEx_Mode_Right)
;Debug TrimEx("-----Text-String------",'-')
;}
; Wie FindString. Nur genauer mit einer angabe. (wird für StringFieldEx(...) benötigt)
Procedure.l FindCountString(String$, FindString$, Anz, StartFrom = 1)
Protected l1.l
Anz-1
For l1=1 To Anz
StartFrom = FindString(String$, FindString$, StartFrom+Len(FindString$))
Next
ProcedureReturn StartFrom
EndProcedure
; ReplaceString verbessert
Macro ReplaceString(String, StringToFind, StringToReplace, Mode = #False, StartFrom = 1)
ReplaceStringEx(String, StringToFind, StringToReplace, Mode, StartFrom)
EndMacro
Procedure.s ReplaceStringEx(String$, StringToFind$, StringToReplace$, Mode.b = #False, StartFrom = 1)
While FindString(String$, StringToFind$, StartFrom)
String$=Left(String$, FindString(String$, StringToFind$, StartFrom)-1)+StringToReplace$+Right(String$, Len(String$)-FindString(String$, StringToFind$, StartFrom)-1+Len(StringToFind$))
StartFrom=FindString(String$, StringToFind$, StartFrom)-1+Len(StringToFind$)
Wend
ProcedureReturn String$
EndProcedure
; Wie StringField(...) nur kann längere Seperatoren verwenden.
Macro StringField(String, Index, Seperator)
StringFieldEx(String, Index, Seperator)
EndMacro
Procedure.s StringFieldEx(String$, Index, Seperator$)
String$+Seperator$
String$ = Mid(String$, FindCountString(String$, Seperator$, Index), FindCountString(String$, Seperator$, Index+1)-FindCountString(String$, Seperator$, Index))
If Not Index=1
String$ = Right(String$, Len(String$)-Len(Seperator$))
EndIf
ProcedureReturn String$
EndProcedure