zweiten, dritten usw. Wert auslesen aus Datei

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Raptor

Betreff: zweiten, dritten usw. Wert auslesen aus Datei

BeitragMo, Aug 30, 2004 0:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi, hab ein Problem, und zwar habe ich in einer Datei in jeder zeile verschiedene Werte stehen, die jeweils mit verschiedenen Zeichen von einander getrennt sind. Die Datei sieht so aus:
_________________________________________
Name#Vorname/Strasse\Hausnummer+PLZ*Ort
__________________________________________

Mit folgendem Code lese ich den ersten Wert aus:

wert1$ = Left(Name,Instr(Name,"#")) ;funktioniert, Name#

Mit dem nächsten Code lese ich den letzten Wert aus:

wert2$ = Right(wert,Len(wert) - Instr(wert,"*")) ;funktioniert, Ort

Soweit so gut, aber wie lese ich jetzt den zweiten Wert aus, sodas er mir nur den zweiten Wert also zwischen # und / ausgibt ? Das gleiche dann für den Dritten,vierten und fünften Wert ?

Hat vielleicht jemand nen Code ? Ich dachte da schon an Mid, aber hier muss er ja die Startposition wissen ?

Grüsse
 

Timo

BeitragMo, Aug 30, 2004 0:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Probiers mit Mid$() --> Onlinehilfe!!

mit Instr() die Anfangsposition herausfinden, ebenfalls mit Instr() die EndPosition herausfinden und mit Mid$(Anfangsposition,Endposition-Anfangsposition) in eine Variable speichern - fertig Wink

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMo, Aug 30, 2004 1:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Schneid doch erst das raus mit left
Name#Vorname
und dann gehste mit right dran und holst dir den Vornamen
ungefähr so...Code: [AUSKLAPPEN]
Dummy$ =left(Wert,instr(Wert,"/")-1)
Wert2$ =right(Dummy,len(dummy) - Instr(Dummy,"#"))

mit mid gehts natürlich auch!
[BB2D | BB3D | BB+]
 

Raptor

BeitragMo, Aug 30, 2004 1:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke so funktioniert es. Jetzt gibt er mir z.b. nur PLZ aus, gibt aber noch ne Fehlermeldung und zwar "Parameter must be Positiv" ???
 

Timo

BeitragMo, Aug 30, 2004 8:34
Antworten mit Zitat
Benutzer-Profile anzeigen
ja der kann bei Mid$() und Instr$() auftreten. Die Startposition mus auf jeden Fall positiv sein und bei 1 Anfangen. 1 steht also fürs erste Zeichen im String, nicht 0. Daher gibt es auch probleme wenn die Startposition kleiner ist.
Die länge kann auch den Wert -1 annehmen. Dann wird alles bis zum Ende kopiert Wink
Guck noch mal in deinen Berechnungen ob du nicht irgendwann einen Startwert unter 0 kriegst...

Jan_

Ehemaliger Admin

BeitragMo, Aug 30, 2004 8:37
Antworten mit Zitat
Benutzer-Profile anzeigen
hm, belese dich mal über Datei Header, Speichermethoden, Die Möglichkeiten von BB, Integer zu speichern.
damit bekommst du deine Dateien Sauberer hin.
between angels and insects
 

Raptor

BeitragMo, Aug 30, 2004 22:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, habe das Problem mit Replace gelöst.
Code:
Dummy$ =Left(Wert,Instr(Wert,"/"));-1)
Wert2$ =Right(Dummy,Len(dummy) - Instr(Dummy,"#"))
wert2V$=Replace(wert2$,"/","") ;/ versteckt
If wert1$>0 Then AddGadgetItem Titellistbox, Wert2V$
-----------------------------------------------------------------------------

Jetzt habe ich noch eine Frage, und zwar sage ich jetzt:
Code:

wert1$ =Left(wert,Instr(wert,"Name#"))

Dummy$ =Left(Wert,Instr(Wert,"/"));-1) ; Vorname ausgeben
Wert2$ =Right(Dummy,Len(dummy) - Instr(Dummy,"#"))
wert2V$=Replace(wert2$,"/","") ;/ versteckt
If wert1$>0 Then AddGadgetItem Titellistbox, Wert2V$

Select WaitEvent()
Case $401
If EventSource()=Titellistbox Then
selected=SelectedGadgetItem(listbox)

ClearGadgetItems infolistbox ;-Box leeren

Dummy$ =Left(Wert,Instr(Wert,"\"));-1)
Wert3$ =Right(Dummy,Len(dummy) - Instr(Dummy,"/"))
wert3V$=Replace(wert3$,"\","") ;\ versteckt
If selected>=0 Then AddGadgetItem infolistbox,"Laufzeit :"+Wert3V$

Dummy$ =Left(Wert,Instr(Wert,"+"));-1)
Wert4$ =Right(Dummy,Len(dummy) - Instr(Dummy,"\"))
wert4V$=Replace(wert4$,"+","") ;+ versteckt
If selected>=0 Then AddGadgetItem infolistbox,"FSK :"+Wert4V$

wert5$ = Right(wert,Len(wert) - Instr(wert,"+"))
If selected>=0 Then AddGadgetItem infolistbox,"Schauspieler :"+Wert5$


EndIf
End Select
;Forever

Wend

CloseFile daten
---------------------------------------------------------------------------
Was ich hiermit erreichen will, er soll wenn ich in der Listbox den Namen anlicke, die er mir ja ausgibt in der Listbox, alle anderen Daten in einer zweiten Listbox ausgeben. Problem: Bsp die Datei sieht so aus:
-------------------------------------------------
Müller#Franz/Teststrasse\23*1234+Testhausen
Meier#Simon/Strassexyz\45+4567+Erde
Müller#Alfred/Dorfstrasse\67+7890+Venus
----------------------------------------------------
mit diesem Code sage ich ihm das er nur die ausgeben soll wo vorne Müller steht:

wert1$ =Left(wert,Instr(wert,"Name#"))

Dummy$ =Left(Wert,Instr(Wert,"/"));-1) ; Vorname ausgeben
Wert2$ =Right(Dummy,Len(dummy) - Instr(Dummy,"#"))
wert2V$=Replace(wert2$,"/","") ;/ versteckt
If wert1$>0 Then AddGadgetItem Titellistbox, Wert2V$


funktioniert auch, wenn ich aber jetzt diesen Namen anklicke gibt er mir zwar die Daten aus (Franz/Teststrasse\23*1234+Testhausen), klicke ich ihn nochmal an gibt er mit die nächsten daten aus(Alfred/Dorfstrasse\67+7890+Venus).

Ich hoffe das Problem habe ich so geschildert das jemand was damit anfangen kann, vielleicht nen Code ? Das ich wenn ich einen Eintrag in LB1 anklicke auch nur die Daten von diesem bekomme und nicht von den anderen.

grüsse

Markus2

BeitragMo, Aug 30, 2004 23:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Nur mal ne blöde Frage ,
haste die Datei jetzt selber erzeugt oder nicht ?
Weil Name#Vorname/Strasse\Hausnummer+PLZ*Ort
denkt sich kein normaler Mensch aus , also das mit den
verschiedenen Trennzeichen meine ich !? Confused
 

Omenaton_2

BeitragMi, Sep 01, 2004 11:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Wieso diese unschöne Zeilenlösung mit den Einträgen?
warum machst du es nicht ganz einfach mit einem TYPE ?
Jeder Film wäre ein Type-Objekt und hätte solche Felder wie:
Titel
Länge
Land
Schauspieler
Genre
etc

dann ultra einfach mit write (read) String Feld für Feld schreiben (lesen).

Wenn du dann alle Action-Filme auflisten lassen willst, gehst du die ganze Type-Objekte durch und wenn Genre = Action ist dann zeigst du den Titel dazu an.
 

Raptor

BeitragFr, Sep 03, 2004 1:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, daran hatte ich auch schon gedacht. Habe es auch mal versucht, aber irgendwie funtzt das nicht so recht. Ich müsste ihm also sagen das wenn ich einen neuen Eintrag speichern will, er erst mal ein neuen Type mit den Feldern erstellen soll. Aber Wie ?Wenn das möglich ist, kann ich ihm ja sagen, das Type= Titel ist, Field=Genre...usw.

Vielleicht hat ja jemand nen Code ?
 

Timo

BeitragFr, Sep 03, 2004 8:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Type Eintrag
  Field Titel
  Field Land
  Field Schauspieler
  Field Genre
End Type


Function ErstelleEintrag(Titel,Land,Schauspieler,Genre)
Local e.Eintrag
  e = New Eintrag
  e\Titel
  e\Land
  e\Schauspieler
  e\Genre
End Function

...
...
....


so in etwa?

Hubsi

BeitragFr, Sep 03, 2004 8:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Setzt aber ein Global e.Eintrag vorraus Wink
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

bruZard

BeitragFr, Sep 03, 2004 9:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein, wenn man dem Funktionsnamen den Typenamen hinten anstellt (getrennt durch einen Punkt) ist der Funktion das Type bekannt.

Beispiel:
Code: [AUSKLAPPEN]

Type tVector
  Field x#,y#,z#
End Type

Function AddVector.tVector(x#=0.0 , y#=0.0 , z#=0.0)
  vec.tVector=New tVector
  vec\x#=x#
  vec\y#=y#
  vec\z#=z#
End Function

Function ShowVector.tVector()
  For vec.tVector=Each tVector
    Debuglog vec\x#+" , "+vec\y#+" , "+vec\z#
  Next
End Function

So funktioniert es auch ohne globale Type Instanzen.
PIV 2,4GHz - 1GB DDR 333 - ATI Radeon9600 - WinXP - DX9.0c - BMax 1.14 - B3D 1.91 - 1280x1024x32

User posted image

Hubsi

BeitragFr, Sep 03, 2004 9:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Cool! Man lernt nie aus Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group