Seite 1 von 2
String Identifizieren
Verfasst: 04.07.2009 18:36
von Tsuki-Namida
Wie der Themen Name schon andeutet möchte ich den inhalt eines Strings Identifizieren....
also ich muss wissen ob sich zuffern im string befinden zum Beispiel:
String$ = "Ich bin 99 Jahre alt."
da sie zahlen an verschiedenen stellen auftauchen kann und immer unterschiedlich sein kann muss ich herausfinden wo im String die Zahl ist.
Die länge der zahl kann aber auch unterschiedlich sein in dem String.
Also 1 aber auch 60974478 die Größe der Zahl muss hier bei egal sein....
ich hoffe das man mir helfen kann....
ach ja wo wir einmal bei String sind... wie kann ich heraus finden ob sich ein bestimmtes Zeichen innerhalb von ' ' ist oder nicht?
Beispiel: Test, 'Test, 2'
da muss ich Test und Test,2 von ein andre trennen wobei das Trennzeichen das ,(Komma) ist aber Test, 2 ein kompletter String
Verfasst: 04.07.2009 18:58
von marco2007
Code: Alles auswählen
If CreateRegularExpression(0, "[0-60974478]")
Dim Result$(0)
a = ExtractRegularExpression(0, " Ich bin 99 Jahre alt.", result$())
If a>0
Debug "Ziffer gefunden"
EndIf
Else
MessageRequester("Error", RegularExpressionError())
EndIf
Ich denke mal, And51 wird hier bald ein vernünftiges Beispiel posten...
Verfasst: 04.07.2009 19:28
von Tsuki-Namida
okay das gibt mir schon mal die anzahl der zifferns aus.... das ist doch schon mal was danke ich werde damit erst mal etwas umher spielen und probieren danke...
nur noch das heraus finden mit den platzhaltern....
also test,'test,2' Das Rote brauch ich getrennt und das komma ist ein trennzeichen und das ' ist sowar wie bei Strings also String$ = "Test, 2"
[/code]
Verfasst: 04.07.2009 19:35
von Kai
Meinst du sowas?
Code: Alles auswählen
Procedure FindValue(String$)
Protected *C.Character = @String$
Protected sResult.s, iFound.i
For c = 0 To Len(String$)
If *C\c > 47 And *C\c < 58
sResult + Chr(*C\c)
iFound = 1
Else
If iFound = 1 : Break : EndIf
EndIf
*C + SizeOf(Character)
Next
ProcedureReturn Val(sResult)
EndProcedure
Debug FindValue("Das ist ein test! 123321,45")
Verfasst: 04.07.2009 19:47
von Tsuki-Namida
supi danke kai
jetzt fehlt mir nur noch das mit dem komme also das ich das komma was innerhalb von ' steht bekommeund das ausherhalb nur als trennzeichen dint....
Beispiel:
Code: Alles auswählen
For k=1 To 3
Debug StringField("Test,'Test, 2','Test, 3'", k, ",")
Next
;Ergebnis muss sein:
;Test
;'Test, 2'
;'Test, 3'
Verfasst: 04.07.2009 22:39
von Kai
Bleibt die Formatierung immer gleich?
Dann könnte man es so machen, geht aber bestimmt auch leichter.
Code: Alles auswählen
String$ = "Test,'Test, 2','Test, 3'"
Debug StringField(String$, 1, ",")
String$ = ReplaceString(String$, "','", "|")
Debug StringField(Mid(String$, FindString(String$, "'", 1)), 1, "|") + "'"
Debug "'" + StringField(Mid(String$, FindString(String$, "'", 1)), 2, "|")
Verfasst: 04.07.2009 22:56
von Kaeru Gaman
ich hätte hier noch ne kleine Lösung für den wert...
Code: Alles auswählen
Procedure.l FindValue( Such$ )
Protected Pos.l = 0
Protected Asci.l
Protected Valu.l
Repeat
Pos+1
Asci = Asc( Mid( Such$, Pos ) )
Valu = Val( Mid( Such$, Pos ) )
Until ( Asci > 47 And Asci < 58 ) Or Pos > Len( Such$ )
ProcedureReturn Valu
EndProcedure
; Zufallsstring erzeugen
Leng1 = Random(10)+5
Leng2 = Random(10)+5
For n=1 To Leng1
a$ + Chr(Random(63)+64)
Next
a$ + Str(Random($7fffffff))
For n=1 To Leng2
a$ + Chr(Random(63)+64)
Next
Debug a$
Debug FindValue( a$ )
Verfasst: 05.07.2009 10:35
von Tsuki-Namida
@Kai
nein die formatierung bleit leider nicht gleich
das kann also so aus sehn:
"Test,'Test, 2','Test, 3'"
"'Test, 4','Test, 2','Test, 3'"
"Test,513,'Test, 3'"
"666,'Test, 2, 3, 4',huhu,'irgent ein, text, mit, Kommas'"
wie man sieht kann es verschiedene Formatierung haben -.- und auch verschieden viele trennzeichen wo dazwischen ein text stehn kann also ähnlich wie ein PB befehl da wird ja das komma was zwischen " " steht auch nicht als trennzeichen verwendet für die parameter....
@Kaeru Gaman
Supi danke
Verfasst: 05.07.2009 11:55
von marco2007
Code: Alles auswählen
string$="666,'Test, 2, 3, 4',huhu,'irgend ein, text, mit, Kommas'"
; string$="'Test, 4','Test, 2','Test, 3'"
; string$="Test,513,'Test, 3'"
For i=1 To CountString(string$, ",")+1
a$=StringField(string$, i, ",")
If Left(a$,1)="'"
Repeat
i+1
a$+","+StringField(string$, i, ",")
Until Right(a$,1)="'"
EndIf
Debug a$
Next
Verfasst: 05.07.2009 19:15
von Tsuki-Namida
Supi genau das habe ich mir so vorgestellt
Vielen lieben dank
