Stringbefehle - Bestimmten Text aus Text

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

N0X

Betreff: Stringbefehle - Bestimmten Text aus Text

BeitragMo, Apr 12, 2010 21:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey!
Ich möchte Text zwischen zwei Zeichen auslesen.
Warum funktioniert diese Zeile nicht?
Code: [AUSKLAPPEN]
Mid(rLine$,Instr(rLine$,",")+1,Instr(rLine$,",",Instr(rLine$,","))-Instr(rLine$,Chr(34))-2)


Der Text aus dem gelesen wird:
Code: [AUSKLAPPEN]
Wagen["models\wagen.3ds",0,200,0]


Es sollen die Koordinaten ausgelesen werden. (Nach dem ",)
Die Zeile wird dreimal aufgerufen, und speichert die Werte in Variablen.

Mfg,
N0X
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

Xeres

Moderator

BeitragMo, Apr 12, 2010 21:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Und mit welcher Variable "schiebst" du Instr weiter, um nicht ständig das erste Zeichen zu finden?
Alles auf einzelne Zeilen & Variablen ausdehnen, Debuggen und dann wenn möglich/nötig auf eine Zeile reduzieren.
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

N0X

BeitragMo, Apr 12, 2010 22:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie kann ich von einer Leerzeile solange Zeilen auslesen bis wieder eine Leerzeile erreicht ist?
(handelt sich um .txt-Datei!)

Habe das so versucht, klappt aber nicht:
Code: [AUSKLAPPEN]
      Repeat
         rLine$    = ReadLine(file)
         o.TObject = New TObject
         k1 = Instr(rLine$,",")
         k2 = Instr(rLine$,",",k1+1)
         k3 = Instr(rLine$,",",k2+1)
         k4 = Instr(rLine$,",",k3+1)
         k5 = Instr(rLine$,",",k4+1)
         k6 = Instr(rLine$,",",k5+1)
         p1 = Instr(rLine$,Chr(34))
         p2 = Instr(rLine$,Chr(34),p1+1)
         
         o\id$     = Left(rLine$,Instr(rLine$,"[")-1)
         o\path$   = Mid(rLine$,Instr(rLine$,Chr(34))+1,Instr(rLine$,Chr(34),Instr(rLine$,Chr(34))+1)-Instr(rLine$,"[")-2)
         o\pos_x#  = Mid(rLine$,k1+1,k2-p2-2)
         o\pos_y#  = Mid(rLine$,k2+1,k3-k2)
         o\pos_z#  = Mid(rLine$,k3+1,k4-k3)
         o\size_x# = Mid(rLine$,k4+1,k5-k4)
         o\size_y# = Mid(rLine$,k5+1,k6-k5)
         o\size_z# = Mid(rLine$,k6+1,Instr(rLine$,"]")-k6)
         DebugLog(o\id$+" "+o\path$+" "+o\pos_x#+" "+o\pos_y#+" "+o\pos_z#+" "+o\size_x#+" "+o\size_y#+" "+o\size_z#)
      Until rLine$=""


Und die Txt-Datei sieht so aus:
Code: [AUSKLAPPEN]
Wagen["models\cart.3ds",100,401.5,100,1,1,1]
Wagen["models\cart.3ds",50,401.5,50,1,1,1]


Mfg,
N0X
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

blackgecko

BeitragDi, Apr 13, 2010 18:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
klappt aber nicht
ist keine Fehlerbeschreibung.
Was klappt nicht?
Wird der String falsch zerschnitten, wird er gar nicht zerschnitten, kommt eine Fehlermeldung, was wird im DebugLog ausgegeben?

In deinem Textdatei-Auszug sehe ich keine Leerzeilen.
So long and thanks for all the fish.
Fedora 17 | Windows 7 || BlitzPlus | BlitzMax
Rechtschreibflame GO!!! Deppenapostroph | SeidSeit | Deppenakzent | DassDas | Deppenleerzeichen | TodTot | enzigste.info - Ja, ich sammel die.

N0X

BeitragDi, Apr 13, 2010 19:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, bei der Txt-Datei sind (eigentlich) vor dem Text und nach dem Text zwei Leerzeilen.
Ich bekomme folgenden Fehler:
"Parameter must be positive"
In Zeile: "o\id$ = Left(rLine$,Instr(rLine$,"[")-1)"

Mfg,
N0X

//EDIT:
Liegt daran, dass die letzte Zeile (also die leere) auch noch gelesen wird.
Habs mit Code: [AUSKLAPPEN]
If rLine$="" Then Exit
nach Code: [AUSKLAPPEN]
rLine$    = ReadLine(file)
gelöst.
Gibts auch schönere Lösungen?

Mfg,
N0X
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

Thunder

BeitragDi, Apr 13, 2010 21:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, ich nehme an es liegt daran, dass du die leere Zeile auch einliest weil bei (Instr(rLine$,"[")-1) ein negativer Wert herauskommt der dann Left übergeben wird.
Ich verwende auch immer deine Lösung - muss nicht heißen, dass sie schön ist, aber sie ist effizient.


mfg Thunder
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group