String Identifizieren

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Tsuki-Namida
Beiträge: 633
Registriert: 17.11.2005 13:27
Kontaktdaten:

String Identifizieren

Beitrag 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
Zuletzt geändert von Tsuki-Namida am 05.07.2009 20:00, insgesamt 2-mal geändert.
Bild
marco2007
Beiträge: 906
Registriert: 26.10.2006 13:19
Kontaktdaten:

Beitrag 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...
Windows 11 - PB 6.03 x64
_________________________________
Benutzeravatar
Tsuki-Namida
Beiträge: 633
Registriert: 17.11.2005 13:27
Kontaktdaten:

Beitrag 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]
Bild
Benutzeravatar
Kai
Beiträge: 264
Registriert: 29.09.2005 20:58
Computerausstattung: iMac 2019
Wohnort: Hannover
Kontaktdaten:

Beitrag 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")
Meine Homepage - Aktuelle Projekte - Launcher
Letzte PB-Version - Window 7 x86
Benutzeravatar
Tsuki-Namida
Beiträge: 633
Registriert: 17.11.2005 13:27
Kontaktdaten:

Beitrag 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'
Bild
Benutzeravatar
Kai
Beiträge: 264
Registriert: 29.09.2005 20:58
Computerausstattung: iMac 2019
Wohnort: Hannover
Kontaktdaten:

Beitrag 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, "|")
Meine Homepage - Aktuelle Projekte - Launcher
Letzte PB-Version - Window 7 x86
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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$ )
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Tsuki-Namida
Beiträge: 633
Registriert: 17.11.2005 13:27
Kontaktdaten:

Beitrag 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
Bild
marco2007
Beiträge: 906
Registriert: 26.10.2006 13:19
Kontaktdaten:

Beitrag 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   
Windows 11 - PB 6.03 x64
_________________________________
Benutzeravatar
Tsuki-Namida
Beiträge: 633
Registriert: 17.11.2005 13:27
Kontaktdaten:

Beitrag von Tsuki-Namida »

Supi genau das habe ich mir so vorgestellt :)

Vielen lieben dank :)
Bild
Antworten