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. :mrgreen:

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 :)