Instr zur Überprüfung der Existenz einer Zeichenkette
Übersicht

boneshakerBetreff: Instr zur Überprüfung der Existenz einer Zeichenkette |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo zusammen,
in meinem aktuellen Projekt geht es darum, eine Textdatei über ReadLine einzulesen (natürlich Zeile für Zeile) und anschließend wird die Häufigkeit einer bestimmten Zeichenkette errechnet. Das habe ich über den Befehl "Instr" gelöst, allerdings scheint es, dass mit meiner jetzigen Lösung immer nur das erste Exemplar der Zeichenkette in einer Zeile gefunden wird und anschließend weiter zur nächsten Zeile gegangen wird... Ich habe bereits versucht es über den Positions-Parameter von Instr versucht, klappt jedoch leider auch nicht. Wie kann ich es lösen, dass mehrere gesuchte Zeichenketten in einer Zeile ausgelesen werden? Hier mein Code: BlitzBasic: [AUSKLAPPEN]
Im Voraus danke und LG., boneshaker |
||
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Programmiere momentan nur noch BM, hab da mal ne Funktion geschrieben... BlitzMax: [AUSKLAPPEN] Function CountOcc:Int(str:String, search:String) Ich glaube dein Fehler ist, dass du InStr nicht in einer Schleife ausführst und deshalb nur immer max. 1 Vorkommen zählst... |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
@CO2: BlitzMax ist nicht BlitzBasic und darum halte ich es nicht für sinnvoll, den Code im Beginners Corner zu posten.
@boneshaker: Wenn du die Vorkommen zählen willst, brauchst du eine Schleife die abbricht, wenn Instr eine 0 zurück gibt (also wenn die letzte Position gefunden wurde und der gesuchte String nicht weiter vor kommt). Je nach dem wie du zählen willst, musst du die Position um 1 bzw. die Länge des gesuchten Strings nach hinten schieben. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
boneshaker |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hab mal versucht, eure Ideen umzusetzen:
BlitzBasic: [AUSKLAPPEN]
Leider wird mir wieder eine völlig falsche Zahl ausgegeben. Sieht jemand meinen Fehler? LG., boneshaker |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] Until pos = Len("blablabla")
Das stimmt nicht. Da steht: Beende die Schleife, wenn die Position der Länge des Strings entspricht. Du willst aber aufhören, wenn der String nicht mehr gefunden wurde. Code: [AUSKLAPPEN] Until pos =0
Code: [AUSKLAPPEN] pos = Instr(eingabeline, "blablabla", pos) + Len("blablabla")
Das sieht richtig gedacht aus, macht aber das Falsche. So wird die Position nicht weitergeschoben. Code: [AUSKLAPPEN] pos = Instr(eingabeline, "blablabla", pos+Len("blablabla"))
|
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
boneshaker |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Super danke, hab es noch kurz optimiert, jetzt funktioniert das perfekt!
hab allerdings ein Problem mit dem TCP-Stream: Der Stream wird nie fertig geschrieben (in eine .txt-Datei), am Ende fehlen immer ein paar Zeilen. Ist das ein TCP-Problem? LG., boneshaker |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mir wäre es neu, dass man mit einem TCP Stream überhaupt in eine Datei schreiben könnte. Da wäre OpenFile![]() ![]() |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group