ReadLine "Rückwärts"

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Cedric30003

Betreff: ReadLine "Rückwärts"

BeitragDo, Apr 14, 2011 23:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey Leute!

Ich habe mich gerade mit ReadLine beschäftigt.

Nun, was muss ich eingeben, dass die vorherige ReadLine nochmals gereadet wird

Anhand des Codes ist es denke ich mal vertsändlich:
Code: [AUSKLAPPEN]

Lis = ReadFile ("Liste.txt")
Global Text$ = ""
While Not KeyHit ( 1 )
   If KeyDown (75) Then
      Text$ = ReadLine(Lis)
      
   End If
   
   If KeyDown (73) Then
      Text$ = ReadLine( ; was soll ich in diese Klammer eintragen, damit er wieder eine Zeile zurückgeht???
   End If
   
   Text 0,0,Text$
   Flip
Wend
End

Listenbeispiel:
(Hier habe ich das mal mit einer Einkauf´s-Liste gemacht)
Zitat:

Wurst
Kaese
Milch
Schinken


ALso ich meine, wenn Key75 gedrückt wird dann wird Zeile 1 gelesen, dann steht nacher bei Text$ "Wurst"
Wenn ich das dann wiederhole, steht dann dort Kaese usw.

Nun möchte ich, dass wenn ich Key73 drücke, dass wenn z.B. Text$ = Schinken ist, wieder Text$ = "Milch" ist.

Sorry wenn ich mich jetzt so kompliziert ausdrücke, aber ich kann es nicht besser erklären.

Danke im Voraus

MfG Cedric

Xeres

Moderator

BeitragDo, Apr 14, 2011 23:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist nicht möglich/sinnvoll. Man könnte komische Konstrukte mit SeekFile bauen, aber ich würde dir raten: Lade die Daten in ein Array/Type. Die kannst du simpel durch schalten, ohne ständig auf die Festplatte zu zu greifen.
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)
 

Toasty

BeitragFr, Apr 15, 2011 13:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Alternative zu Xeres' Tipp:

BlitzBasic: [AUSKLAPPEN]
;[...]
Position = FilePos( DateiStream ) ;Position festhalten
Name$ = ReadLine( DateiStream ) ;Text auslesen
SeekFile( DateiStream, Position ) ;Auf festgehaltene Position zurücksetzen
@AMD Phenom BE X4 2,5Ghz(Overclocked 2,61Ghz); 4GB DDR2; 512MB nVidia GeForce 8400gs; Win7 Home Premium 64bit
Lua for President!

Xaymar

ehemals "Cgamer"

BeitragFr, Apr 15, 2011 13:56
Antworten mit Zitat
Benutzer-Profile anzeigen
oder gleich:

BlitzBasic: [AUSKLAPPEN]
Local Text$ = ReadString(Stream)
SeekFile Stream,FilePos(Stream)-Len(Text)-2


Natürlich kann man nun mit seekfile so ein konstrukt bauen um herauszufinden worauf es reagierte:
BlitzBasic: [AUSKLAPPEN]
Local Text$ = ReadString(Stream)
SeekFile Stream,FilePos(Stream)-2
Local TextEnd1% = ReadByte(Stream)
Local TextEnd2% = ReadByte(Stream)
;...Auf Chr(13) und Chr(10) prüfen etc.
Warbseite

ToeB

BeitragFr, Apr 15, 2011 15:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Aber lass dich nicht verwirren und in die Irre führen durch SeekFile und dergleichen, die Beste und schnellste Möglichkeit ist die mit dem Array oder über Types. Dadurch ist alles im Ram und drauf kann schnell zugegriffen werden.


mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!
 

BBPro2

BeitragFr, Apr 15, 2011 15:55
Antworten mit Zitat
Benutzer-Profile anzeigen
das ist aber nur dann sinnvoll wenn die datei klein genug ist.

andernfalls könntest du den ram sprengen bzw das pure einlesen zu beginn würde nervig lange brauchen

so optimal finde ich den tipp mit dem array demnach nicht. zumindest nicht als allgemeine antwort

Hubsi

BeitragFr, Apr 15, 2011 16:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Befürchtungen den Ram mit einem Hobbyentwickler-Game zu überfordern und stattdessen lieber ständig auf der Festplatte runzuwursteln halte ich für eine gewagte Aussage um ehrlich zu sein. Zumal sowas brutalst fehleranfällig sein kann.
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

ToeB

BeitragFr, Apr 15, 2011 16:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Stell dir mal vor er hat 10000 Zeilen mit im Durschnitt 32 Zeichen. Das wären dann (32+4)*10000 Byte Ram, also 360000 Byte. Das wären um die 320 Kb, welche im Ram rumgeistern. Und was ist das im vergleich zu den Mengen an Ram-Speicher den sogar ein normaler Pc heutzutage hat ?

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!
 

BBPro2

BeitragFr, Apr 15, 2011 17:50
Antworten mit Zitat
Benutzer-Profile anzeigen
wieso rechnest du in zeilen und länge von zeilen ?
es geht schlichtweg um die größe der datei.. das braucht man nich
erst durch zeilen zu veranschaulichen^^
und dateien, die 200mb oder so groß sind sind nunmal keine seltenheit mehr.
je nachdem was er damit macht kann die datei auch 1 oder 2 gb groß sein,
warum denn nicht ?
und dauerhaft auf der festplatte "rumgeistern" ist nun wirklich kein problem,
festplatten sind schnell genug.
wenn er natürlich pro sekunde 1000 zeilen abfragen will ist ein array besser.

es ist ein simpler trade off und eben situationsbedingt.
alles was ich anprangere ist die aussage "die beste und schnellste lösung ist.." -
das ist nunmal einfach nicht wahr, beide möglichkeiten haben ihre vor- und nachteile
und beide sind in der praxis anwendbar

Xeres

Moderator

BeitragFr, Apr 15, 2011 18:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Im Beginners-Corner und bei obigem Beispiel würde ich eher nicht davon ausgehen, dass Jemand die gesammelten Werke von Shakespeare einlesen möchte... In dieser Situation ist ToeBs Aussage schon richtig.
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)

BladeRunner

Moderator

BeitragSa, Apr 16, 2011 8:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Exakt. Noch dazu entlastet man die Festplatte von massiven und unnötigen Zugriffen.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Apr 16, 2011 12:18
Antworten mit Zitat
Benutzer-Profile anzeigen
...Dateien die größer als 1MB groß sind (oder gar 200MB), werden i.d.R. auch nicht mehr in Zeilen eingelesen. Soviel dazu.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group