| |
|
|
Michael Wodrich | Da ich diese beiden ständig nutze, setze ich sie mal hier hinein.
MemPosAbs Da MemPos() nur die Position von der Startposition an gerechnet zurückgibt, habe ich MemPosAbs geschrieben. Hier wird die absolute Position innerhalb des Bereiches zurückgegeben. Wie man an SubStrCount() sehen kann vereinfachen sich dann Suchfolgen.
SubStrCount Da SubStr() auch mittendrin Leerstrings zurückgeben und das Trennzeichen aus einem String bestehen kann ist das Zählen der Worte nicht ganz so einfach. Es geht zwar auch anders aber ich habe einen Bereich für das Zählen benutzt.
Hier die Funktionen mit getestetem Beispiel: KompilierenMarkierenSeparieren!
MemPosAbs + SubStrCount
by Michael Wodrich
erstellt mit XProfan 9.x
Proc MemPosAbs liefert die absolute Adresse (vom Beginn der Bereichsvariablen)
Parameters Bereich#, Start&, Finde$
Declare gefunden&
gefunden& = MemPos( Bereich#, Start&, Finde$ )
Return If( gefunden& <> (-1), Start& + gefunden&, (-1) )
EndProc
Proc SubStrCount als Ergänzung zu SubStr$( Wortliste$, n&, Trennzeichen$ ); liefert Anzahl
Parameters Wortliste$, Trennzeichen$
Declare Bereich#, Position&, Anzahl&, sovieleTrennzeichen&
Dim Bereich#, Len( Wortliste$ )
Char Bereich#, 0 = Wortliste$
sovieleTrennzeichen& = Len( Trennzeichen$ )
Position& = MemPos( Bereich#, Position&, Trennzeichen$ )
While Position& <> (-1)
Inc Anzahl&
Position& = MemPosAbs( Bereich#, Position& + sovieleTrennzeichen&, Trennzeichen$ )
EndWhile
Dispose Bereich#
Return Anzahl& + 1
EndProc
Hauptprogramm
Declare oldDeci%, A$
oldDeci% = Set("Decimals", 0 )
Print "Teste SubStr$() und SubStrCount():
"
A$ = "eins,zwei,,vier,fünf,sechs,sieben"
Print "<" + A$ + "> + Trenner <,> = " + Str$( SubStrCount( A$, "," ) )
WhileLoop 8
Print Str$( &loop ) + ": <" + SubStr$( A$, &loop, "," ) + ">"
EndWhile
Print ""
A$ = "eins, zwei,,vier, fünf, sechs, sieben,"
Print "<" + A$ + "> + Trenner <, > = " + Str$( SubStrCount( A$, ", " ) )
WhileLoop 8
Print Str$( &loop ) + ": <" + SubStr$( A$, &loop, ", " ) + ">"
EndWhile
Print ""
A$ = "eins, zwei, , vier, fünf, sechs, sieben, "
Print "<" + A$ + "> + Trenner <, > = " + Str$( SubStrCount( A$, ", " ) )
WhileLoop 8
Print Str$( &loop ) + ": <" + SubStr$( A$, &loop, ", " ) + ">"
EndWhile
Set("Decimals", oldDeci% )
WaitInput
End
Schöne Grüße Michael Wodrich |
|
|
| Programmieren, das spannendste Detektivspiel der Welt. | 28.04.2006 ▲ |
|
|
|