Hallo,
suche etwas wie stringinstr; sollte aber nur x zeichen von links vergleichen - wobei aber x variable ist. Z.B. Vergleich bis zum ersten ;
Hallo,
suche etwas wie stringinstr; sollte aber nur x zeichen von links vergleichen - wobei aber x variable ist. Z.B. Vergleich bis zum ersten ;
hi,
suchst du vieleicht so etwas ?
$result = StringLeft("1234567890", 3)
MsgBox(0, "Leftmost 3 characters are:", $result)
ergebnis: 123
mfg
trallala
Hallo,
ich habe da mal was gebastelt!
;===============================================================================
;
; Description: Prüft, ob eine Zeichenfolge eine andere Zeichenfolge enthält. Mit Angabe einer Suchposition.
; Parameter(s): $String = Zeichenfolge, die geprüft werden soll
; $SubString = Unterzeichenfolge, nach der gesucht werden soll
; (optional) $Pos = kann Zahlenwert oder Zeichenfolge sein.
; Wenn $Occurence positiv ist wird die Zeichenfolge bis zu dieser Position durchsucht,
; ist $Occurence negativ wird die Zeichenfolge ab dieser Position durchsucht.
; Wenn $Pos = -1 ist wird der komplette String durchsucht
; (optional) $CaseSense = 0 - Groß- und Kleinschreibung werden nicht berücksichtigt (Vorgabewert)
; 1 - Berücksichtigt Groß- und Kleinschreibung
; (optional) $Occurence = Bestimmt, nach welchem Auftreten der Unterzeichenfolge gesucht werden soll.
; Ist der Wert negativ, wird von rechts ausgehend gesucht.
; Der Vorgabewert ist 1 (erstes Auftreten von links aus gesehen)
; Requirement(s): keine
; Return Value(s): bei Erfolg: Position von $SubString (absolut)
; 0 = $SubString nicht enthalten
; @error = 0 - Normaler Ablauf
; @error = 1 - Nichts gefunden. Der Wert für $Occurance muss eine positive oder negative
; Ganzzahl sein.
; @error = 2 - $Pos ist ungültig
; Author(s): bernd670
;
;===============================================================================
Func _MyStringInStr ($String, $SubString, $Pos = -1, $CaseSense = 0, $Occurence = 1)
If $Occurence = 0 Then
SetError(1)
Return 0
EndIf
If $Pos = 0 Then
SetError(2)
Return 0
EndIf
If IsString($Pos) Then
$Pos = StringInStr($String,$Pos)
If @error Or $Pos = 0 Then
SetError(2)
Return 0
EndIf
EndIf
If $Pos > 0 Then
If $Occurence < 0 Then
$String = StringRight($String,$Pos)
Else
$String = StringLeft($String,$Pos)
EndIf
EndIf
$Find = StringInStr($String,$SubString,$CaseSense,$Occurence)
If @error Then
SetError(@error)
Return 0
EndIf
If $Pos > 0 And $Occurence < 0 Then $Find = $Pos + $Find
SetError(0)
Return $Find
EndFunc
Alles anzeigen
@edit1: Fehlerteufel -> Bug entfernt! :hammer:
Hallo,
sieht zwar gut aus - ist aber nicht so ganz was ich meinte. Mal ein Beispiel an einer CSV-Datei:
Die Datei wird zeilenweise durchsucht - kein Problem
Jede Zeile wird auf Vorhandensein des Suchstrings geprüft und erfolg gemeldet - auch keine Problem
Jetzt will ich aber feststellen ob nur das erste Feld xxx; dem Suchbegriff entspricht. StringInStr prüft ja den ganzen String, abschneiden ist auch etwas umständlich, müsste dann ja die erste Position von ; bestimmen, String abschneiden und prüfen - dachte es gibt hier vielleicht schon was einfacherers.
Hi,
da du sagst, Bernds Lösung ist nicht das, was du meinst, ist mir ehrlich gesagt nicht ganz klar, was du geanau möchtest.
Stell doch mal ein Beispiel ein: Welches ist der Ausgangsstring, was möchtest du selektieren?
z.B.
$string = "1234567890"
$n = variable Anzahl zu selektierender Zeichen ($n = 2)
$instring = "5"
wenn $instring in $string enthalten, dann Rückgabe $n Zeichen links davon
Ergebnis hier: "34"
Meinst du sowas?
Ich denke er meint mit "sollte aber nur x zeichen von links vergleichen " einfach nurden linken Teilstring:
$test="abc ;def ghi"
$x=8
msgbox( 0,"stringtest",StringInStr ( StringLeft($test,$x ), ";" ))
und den Sting nicht teilen wollen, hm - schneller gehts wohl nicht, sprich eine elgantere Lösung.
Kann meine Funktion (jetzt -> Bug entfernt) auch: