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! Bild

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.