Seite 2 von 2
Verfasst: 01.05.2007 11:40
von Friedhelm
AND51 hat geschrieben:Frage: Wie unterbinde ich beim Poken, dass eine abschließende Null angehängt wird?
CopyMemory()
Syntax
CopyMemory(*SourceMemoryID, *DestinationMemoryID, Laenge)
Beschreibung
Kopiert einen Speicherbereich von '*SourceMemoryID' (der Ausgangs-Speicheradresse) mit der angegebenen Länge (in Bytes) zur '*DestinationMemoryID' (der Ziel-Speicheradresse).
Wenn sich Ausgangs- und Zielspeicherbereich überlappen, ist es sicherer, MoveMemory() zu verwenden, andernfalls kann das Ergebnis falsch sein.
Unterstützte OS
StringReplace Teil 2
Verfasst: 01.05.2007 12:05
von dater
Hallo,
ich habe mein "StringReplace" etwas erweitert.
Weiter funktionen kommen noch. Aber aus zeitgründen dauert es noch etwas.
Wer will, kann den Code ändern und hier Posten.
Code: Alles auswählen
; StringReplace 30.04.2007 Markus Maiwald
; (fast so gut wie das von AHK)
; StringReplace(text.s,such.s,ersetz.s,anzahl,grosklein.b)
; text.s =Text der durchsucht wird
; such.s =Suchtext
; ersetz.s =Text der durch den Suchtext ersetzt werden soll
; anzahl.l =Anzahl der ersetzungen ( 0 = alles )
; grosklein.b = 0 => Ohne Groß-Klein unterscheidung
; großklein.b = 1 => 1 : 1 erkennungn
Procedure.s StringReplace(text.s,such.s,ersetz.s,anzahl,grosklein.b)
If grosklein=0 : gk.b=32 : Else : gk.b=0 : EndIf
l=Len(text.s) : l2=Len(such.s) : te=0 : start=1
weiter:
For s=start To l ; loop text
a.b=Asc(Mid(text.s,s,1)) ; asc Zeichen Text
For t=1 To l2 ; loop suchtext
b.b=Asc(Mid(such.s,t+te,1)) ; asc Zeichen Suchtext
If a.b=b.b Or (a.b+gk.b)=b.b Or (a.b-gk.b)=b.b; Groß Klein Schreibung aufheben.
te=te+1 ; Anzahl der Treffer
If te=l2 ; Anzahl der Treffer mit Anzahl der SuchZeichen vergleichen
ok=ok+1 ; Anzahl der gfunden Texte die ersetzt wurden.
text1.s=Left(text.s,s-l2) ; Linke Textseite
text2.s=Right(text.s,l-s) ; Rechte Textseite
text.s=text1.s+ersetz.s+text2.s ; Text zusammen setzen
l=Len(text.s) ; Neue Text Länge
start=s-l2+(Len(ersetz.s))+1 ; Neuer Start berechnen.
te=0 ; Treffer auf null
If anzahl=ok
Goto ende
Else
Goto weiter ;
EndIf
EndIf
Break
Else
te=0
EndIf
Next t
Next s
ende:
ProcedureReturn text.s
EndProcedure
;z.B.
A$="Heute wird am 1.Mai gefeiert."
b$="1.Mai"
c$="18.Mai"
Debug a$
a$=StringReplace(a$,b$,c$,0,1)
Debug a$
a$=StringReplace(a$,"Mai","Juni",0,1)
Debug a$
a$=StringReplace(a$,"gefeiert","gefressen",0,1)
Debug a$
a$=StringReplace(a$,"e","E",2,0)
Debug a$
StringReplace
Verfasst: 04.05.2007 04:22
von dater
Hi,
ich habe den Code etwas optimiert, das Goto ist weg und Define wurde hinzugefügt.
Code: Alles auswählen
; StringReplace 30.04.2007 Markus Maiwald
; (fast so gut wie das von AHK)
; StringReplace(text.s,such.s,ersetz.s,anzahl,grosklein.b)
; text.s =Text der durchsucht wird
; such.s =Suchtext
; ersetz.s =Text der durch den Suchtext ersetzt werden soll
; anzahl.l =Anzahl der ersetzungen ( 0 = alles )
; grosklein.b = 0 => Ohne Groß-Klein unterscheidung
; großklein.b = 1 => 1 : 1 erkennungn
Procedure.s StringReplace(text.s,such.s,ersetz.s,anzahl,grosklein.b)
Define.l l,l2,te,start,s,anzahl,ok,t
Define.b grosklein,gk,a,b
Define.s text,text1,text2
If grosklein=0 : gk.b=32 : Else : gk.b=0 : EndIf
l=Len(text.s) : l2=Len(such.s) : te=0 : start=1 : s=0
Repeat
a.b=Asc(Mid(text.s,s,1)) ; asc Zeichen Text
For t=1 To l2 ; loop suchtext
b.b=Asc(Mid(such.s,t+te,1)) ; asc Zeichen Suchtext
If a.b=b.b Or (a.b+gk.b)=b.b Or (a.b-gk.b)=b.b; Groß Klein Schreibung aufheben.
te=te+1 ; Anzahl der Treffer
If te=l2 ; Anzahl der Treffer mit Anzahl der SuchZeichen vergleichen
ok=ok+1 ; Anzahl der gfunden Texte die ersetzt wurden.
text1.s=Left(text.s,s-l2) ; Linke Textseite
text2.s=Right(text.s,l-s) ; Rechte Textseite
text.s=text1.s+ersetz.s+text2.s ; Text zusammen setzen
l=Len(text.s) ; Neue Text Länge
start=s-l2+(Len(ersetz.s))+1 ; Neuer Start berechnen.
te=0 ; Treffer auf null
If anzahl=ok
Break
Else
Continue
EndIf
EndIf
Break
Else
te=0
EndIf
Next t
s=s+1
Until s>l
ProcedureReturn text.s
EndProcedure
Define.s a$,b$,c$
;z.B.
A$="Heute wird am 1.Mai gefeiert."
b$="1.Mai"
c$="18.Mai"
Debug a$
a$=StringReplace(a$,b$,c$,0,1)
Debug a$
a$=StringReplace(a$,"Mai","Juni",0,1)
Debug a$
a$=StringReplace(a$,"gefeiert","gefressen",0,1)
Debug a$
a$=StringReplace(a$,"e","E",2,0)
Debug a$
Verfasst: 04.05.2007 15:14
von AND51
Innerhalb von Proceduren sollte PROTECTED statt DEFINE verwendet werden.
Auch finde ich es schade, dass du auf meinen Hinweis keine Antwort gibst:
Ich sagte, dass ReplaceString() auch die Option bietet, Groß-/Kleinschreibung zu ignorieren.
Du meinst außerdem, es würde nur den ersten Strig ersetzen. Das stimmt nicht, es ersetzt alle Strings.
Du hast also das Rad unnötigerweise neu erfunden.
Verfasst: 04.05.2007 16:06
von edel
bla bla bla ...
Schonmal daran gedacht dass das Verhalten von ReplaceString
nicht immer ideal ist ? Wer etwas anderes braucht kann z.B. hier
im ctt Forum nachgucken.
Verfasst: 04.05.2007 16:37
von AND51
> bla bla bla ...
Soll das heißen, du stellst meine Hilfe in Frage? Das find ich aber nicht nett!
> Schonmal daran gedacht dass das Verhalten von ReplaceString nicht immer ideal ist ?
In welchen Fällen denn zum Beispiel?
Änderung
Verfasst: 05.05.2007 09:16
von dater
Hi,
ich habe eure Bitten gelesen und werde die änderung durchführen.
Nur meine Zeit am Computer ist stark eingeschrenk.
Groß.Klein Schreibung ist drinne. last mir nich etwas Zeit.
Danke Dater...