Wörter aus String$ isolieren

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Ironsmurf
Beiträge: 111
Registriert: 04.01.2006 12:57
Computerausstattung: AMD FX(tm)-6300 Six-Core Processor
3.50 GHz / 8 GB Ram
Windows 7 / 64bit / Ultimate
Purebasic 5.20 LTS (Windows - x86)
Wohnort: Deutschland

Wörter aus String$ isolieren

Beitrag von Ironsmurf »

Hallo
ich möchte mir eine kleine Schleife programmieren, die aus einem String mit 4 Namen, anhand einer Suchfunktion nur den Namen isoliert der mit dem Suchbegriff übereinstimmt.

String$ = "Max Mustermann, Karl Kugelschreiber, Bernd Bleistift, Frank Filzstift"
Suchstring$ = "Filz"
Gefunden wird der Begriff, angezeigt werden soll aber nur "Frank Filzstift" und nicht
"Max Mustermann, Karl Kugelschreiber, Bernd Bleistift, Frank Filzstift"

Das Programm durchläuft auch vier mal die Schleife, allerdings zeigt er immer nur den ersten Namen an, wo muß der Zähler K für die Schleife eingebaut werden, bei den Befehlen.

Code: Alles auswählen

String$ = "Max Mustermann, Karl Kugelschreiber, Bernd Bleistift, Frank Filzstift"
Suchstring$ = "Filz"

Komma = CountString(String$, ",") : Komma + 1 : Debug Komma ; zählt die Kommas, +1 ergibt die Anzahl der Namen im String

For K = 1 To Komma ; zählt von 1 - 4

Position = FindString(String$, ", ", 1) : Debug Position ; ergibt die Position des ersten gefundenen Kommas
Position - 1 : Debug Position ; -1 ergibt die Anzahl der Zeichen aus der der erste Name besteht
Ergebnis$ = Mid(String$, 1, Position) : Debug Ergebnis$ ; ist der erste Name isoliert "Max Mustermann"
If FindString (Ergebnis$, Suchstring$,1) : EndIf : Debug "Alles klar" ; Stimmt Ergebnis$ mit Suchstring$ überein "Alles klar"
RestString$ = ReplaceString (String$,Ergebnis$, "", 1) ; entfernt "Max Mustermann aus dem String$
RestString = Len(Reststring$) : RestString - 2
Reststring$ = Right (RestString$, RestString) : Debug RestString$
String$ = RestString$ ; nun besteht der String nur noch aus 3 Namen "Karl Kugelschreiber, Bernd Bleistift, Frank Filzstift"

Next
Vielen Dank für eure Hilfe und Mühe :cry:
Es kommt immer auf die Sichtweise des Betrachters an.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Wörter aus String$ isolieren

Beitrag von STARGÅTE »

Ich denke StringField() sollte das ganze vereinfachen:

Code: Alles auswählen

String$ = "Max Mustermann, Karl Kugelschreiber, Bernd Bleistift, Frank Filzstift"
Suchstring$ = "Filz"

MaxIndex = CountString(String$, ",")+1
For Index = 1 To MaxIndex
  SubString$ = StringField(String$, Index, ",")
  If FindString(SubString$, Suchstring$, 1)
    Debug Trim(SubString$)
  EndIf
Next
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Re: Wörter aus String$ isolieren

Beitrag von TomS »

Benutz Stringfield()

Code: Alles auswählen

String$ = "Max Mustermann, Karl Kugelschreiber, Bernd Bleistift, Frank Filzstift"
Suchstring$ = "Filz"

For k = 1 To CountString(String$, ",")+1
	exploded$ = StringField(String$, k, ",")
	If FindString(exploded$, SuchString$, 1)
		Debug Trim(exploded$)
	EndIf 
Next 
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Wörter aus String$ isolieren

Beitrag von NicTheQuick »

StringField() ist dein Freund.

Code: Alles auswählen

Define.s string, suchString


string = "Max Mustermann, Karl Kugelschreiber, Bernd Bleistift, Frank Filzstift"
suchString = "Filz"


Define.i fields, i
Define.s field

fields = CountString(string, ",") + 1

For i = 1 To fields
	field = Trim(StringField(string, i, ","))
	If FindString(field, suchString, 1)
		Debug field
	EndIf
Next
///Edit:

:bounce:
Benutzeravatar
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

Re: Wörter aus String$ isolieren

Beitrag von rolaf »

Das nenne ich mal ne 3fach Optimal-Hilfe. :allright:
Wollte auch schon posten... :mrgreen:
Drei Ärsche ein Gedanke :wink:
:::: WIN 10 :: PB 5.73 :: (x64) ::::
Benutzeravatar
Ironsmurf
Beiträge: 111
Registriert: 04.01.2006 12:57
Computerausstattung: AMD FX(tm)-6300 Six-Core Processor
3.50 GHz / 8 GB Ram
Windows 7 / 64bit / Ultimate
Purebasic 5.20 LTS (Windows - x86)
Wohnort: Deutschland

Re: Wörter aus String$ isolieren

Beitrag von Ironsmurf »

Vielen Dank für eure Hilfe :bounce:
Es kommt immer auf die Sichtweise des Betrachters an.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Wörter aus String$ isolieren

Beitrag von STARGÅTE »

Wie geil :lol: :lol: :lol:

Vorallem TomS und meins sind ja fast zu 95% gleich ^^

Aber bei TomS muss ich sagen, das CountString(String$, ",")+1 nach dem To zu lassen ist schlecht.
Weil Sachen hinter dem To mit jedem Schleifendurchlauf neu ausgewertet werden.

Somit sollte man immer eine Variable damit füllen und die dann dort angeben wie NicTheQuick und ich.

BTW: Sogar alle haben an das Trim() gedacht >:)
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Ironsmurf
Beiträge: 111
Registriert: 04.01.2006 12:57
Computerausstattung: AMD FX(tm)-6300 Six-Core Processor
3.50 GHz / 8 GB Ram
Windows 7 / 64bit / Ultimate
Purebasic 5.20 LTS (Windows - x86)
Wohnort: Deutschland

Re: Wörter aus String$ isolieren

Beitrag von Ironsmurf »

Hallo
das mit der Erklärung von FindString funktioniert wunderbar.
Habe nun diese Schleife in mein Programm integriert, jedoch findet er immer nur den ersten Namen und isoliert ihn.
Das sich diese Schleife in einer anderen Schleife befindet, also verschachtelt, vermute ich den Fehler dort, kann ihn jedoch nicht finden.
Wie muß die Schleife aussehen damit es funktioniert ?

Code: Alles auswählen

SortStructuredArray(DVD(), 0, OffsetOf(Movie\Jahr$), #PB_Sort_String)
     PrintN("")
         For index = 1 To 9999
               
 AusgabeProm$=""
               
       AusgabeProm$ = DVD(index)\Star$
            If FindString (LCase(AusgabeProm$),LCase(Servertext$),1)
         
         Komma = CountString(String$, ",") : Komma + 1 : Debug komma
         
For K = 1 To Komma

Schauspieler$ = Trim(StringField(AusgabeProm$, K, ",")) ; vermute hier den Fehler ?

Next

ConsoleColor(15,0)
        Print(" ") : print_s(Schauspieler$) : Print_s(" ° ") ; vermute hier den Fehler ?
             Print (DVD(index)\Jahr$) : Print_S(" ° ")      
                 Print_s (DVD(index)\Name$) : PrintN("")
         
EndIf
          Next
Es kommt immer auf die Sichtweise des Betrachters an.
Benutzeravatar
Waldixxl
Beiträge: 108
Registriert: 27.12.2005 17:35
Wohnort: Linz, Österreich

Re: Wörter aus String$ isolieren

Beitrag von Waldixxl »

Hallo
Teste es mal so!
Habe es nicht getestet!

Code: Alles auswählen

SortStructuredArray(DVD(), 0, OffsetOf(Movie\Jahr$), #PB_Sort_String)
     PrintN("")
         For index = 1 To 9999
           AusgabeProm$ = DVD(index)\Star$
           Komma = CountString(AusgabeProm$, ",") : Komma + 1 : Debug komma
           
            For K = 1 To Komma
               Schauspieler$ = Trim(StringField(AusgabeProm$, K, ",")) ; vermute hier den Fehler ?
                If FindString (LCase(Schauspieler$),LCase(Servertext$),1)
                   ConsoleColor(15,0)
                   Print(" ") : print_s(Schauspieler$) : Print_s(" ° ") ; vermute hier den Fehler ?
                   Print (DVD(index)\Jahr$) : Print_S(" ° ")     
                   Print_s (DVD(index)\Name$) : PrintN("")
               EndIf    
            Next
         Next 
mfg
Walter
Lesen bei schlechten Lichtverhältnissen ist nicht schlecht für die Augen, sondern trainiert sie sogar.

Linux Ubuntu Mate 18.04
PB 5.71
Intel i5
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Wörter aus String$ isolieren

Beitrag von NicTheQuick »

@Ironsmurf:

Ich verstehe nicht, was du eigentlich machen willst. Ein paar mehr Informationen wären sicherlich hilfreich.

Außerdem bekomme ich Augenkrebs, wenn ich deinen uneingerückten Code lese.
In so einem Code habe ich gar keine Lust Fehler zu suchen. Tu doch allen einen Gefallen, gehen in die IDE, drück STRG+A und dann STRG+I. Dann ist alles richtig eingerückt. Dann darfst du deinen Code auch hier posten.
Antworten