Seite 1 von 1
BASIC Befehle MID und STRING
Verfasst: 05.05.2007 15:00
von pickelrobert
Hallo,
beim Hantieren mit Strings mußte ich feststellen, des es in PB den STRING-Befehl nicht gibt. Außerdem Gibt es nur eine MID-Funktion, jedoch keinen MID-Befehl. Hat da jemand eine einfache Lösung ?
Danke und Gruß
Verfasst: 05.05.2007 15:04
von edel
Kannst du uns , zumindest denen die nicht aus der Basic Ecke kommen,
erklaeren was daran anders als str() und mid() sein soll ?
Verfasst: 05.05.2007 18:18
von Fluid Byte
Jetzt bin ich mal gespannt wie sich die MID-Funktion von dem MID-Befehl unterscheidet...
Verfasst: 05.05.2007 18:34
von pickelrobert
MID-Funktion = wie vorhanden
MID-Befehl funktioniert so:
tmp="grüne Hose"
MID(tmp,3,2)="au"
tmp="graue Hose"
STRING-Befehl/Funktion
tmp=STRING("a",3)
tmp="aaa"
Die "Fehler" sind mir beim Portieren von Visual Basic 6 - Code aufgefallen
Verfasst: 05.05.2007 18:46
von edel
Du kannst zwar einer Funktion keinen Wert zuweisen aber alles was du brauchst findest du in der Hilfe unter String (rset z.B.).
Verfasst: 05.05.2007 19:04
von Fluid Byte
Abgefahrene Syntax!
Der MID-Befehl hat mit dem eigentlichem BASIC-MID nix zu tun sondern ist lediglich das Suchen/Ersetzen in Strings mit Start- / Längenangabe.
Was den STRING Befehl angeht:
Code: Alles auswählen
Procedure.s STRING(Char.s,Count)
Protected Result.s
lpBuffer = AllocateMemory(Count)
RtlFillMemory_(lpBuffer,Count,Asc(Char))
Result = PeekS(lpBuffer)
FreeMemory(lpBuffer)
ProcedureReturn Result.s
EndProcedure
Verfasst: 05.05.2007 20:51
von pickelrobert
Danke für den STRING-Tip.
Zur MID-Anweisung sagt die MSDN Folgendes:
http://msdn2.microsoft.com/de-de/librar ... S.80).aspx
Mid-Anweisung
Ersetzt eine bestimmte Anzahl an Zeichen in einer String-Variablen durch Zeichen aus einer anderen Zeichenfolge.
Mid( _
ByRef Target As String, _
ByVal Start As Integer, _
Optional ByVal Length As Integer _
) = StringExpression
BestandteileBestandteile
Target
Erforderlich. Name der zu ändernden String-Variablen.
Start
Erforderlich. Integer-Ausdruck. Zeichenposition in Target, wo die Ersetzung des Texts beginnt. Start verwendet einen mit Eins beginnenden Index.
Length
Optional. Integer-Ausdruck. Anzahl der zu ersetzenden Zeichen. Wird hierfür kein Wert angegeben, so wird String komplett verwendet.
StringExpression
Erforderlich. String-Ausdruck, der einen Teil von Target ersetzt.
Verfasst: 06.05.2007 00:58
von freak
Code: Alles auswählen
Macro String(char, count)
RSet("", count, char)
EndMacro

Verfasst: 06.05.2007 09:59
von hjbremer
Code: Alles auswählen
Procedure MidString(*ori, start, *neu, lg=0)
If lg = 0
lg = MemoryStringLength(*neu)
EndIf
MoveMemory(*neu, *ori+start-1, lg)
;in dieser Version kann Ori länger werden, wenn lg nicht angegeben oder zu groß ist
EndProcedure
Procedure MidString1(*ori, start, *neu, lg=0)
lgori = MemoryStringLength(*ori)
lgneu = MemoryStringLength(*neu)
If lgneu + start > lgori
lgneu = lgori - start + 1
EndIf
If lg = 0 Or lg > lgneu
lg = lgneu
EndIf
MoveMemory(*neu, *ori+start-1, lg)
;in dieser Version sollte Ori NICHT länger werden
EndProcedure
tmp$="grüne Hose"
MidString(@tmp$,3,@"au"): Debug tmp$
tmp$="grüne Hose"
MidString(@tmp$,3,@"au",2): Debug tmp$
tmp$="grüne Hose"
MidString1(@tmp$,3,@"au",18): Debug tmp$
tmp$="grüne Hose"
MidString1(@tmp$,3,@"au123456789123456789",18): Debug tmp$
Habe allerdings nicht alle möglichen Variationen getestet
Wer will kann MoveMemory auch durch CopyMemory ersetzen.