Datei mit Strings und SeekFile(Erledigt)

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Andy S

Betreff: Datei mit Strings und SeekFile(Erledigt)

BeitragMo, Apr 05, 2004 16:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Leute,

habe ein kleines Problem, ich möchte in mein Game(Universum) Nachrichten an zeigen!
Ich möchte diese Nachrichten(Strings) in eine Datei speichern, wie das geht ist mir klar!
Nun zu meinem Problem, angenoman ich möchte die zweite Nachricht laden, aber wie mache ich das, da die String Var. hat eine undefinierte länge hat. Bei SeekFile kann man ja nur Bytes angeben?

Die Nachrichten sollen so außen:
1. Zeile Titel
2. Zeile Verfasser
3. bis xx. Zeilen der Text
.
.
.


Andy S
  • Zuletzt bearbeitet von Andy S am Di, Apr 06, 2004 8:04, insgesamt einmal bearbeitet
 

onlyRead

BeitragMo, Apr 05, 2004 16:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Beispiel:

Text-File:
Code: [AUSKLAPPEN]

Anzahl der Texte (hier 2)

Text 1 Titel
Text 1 Text

Text 2 Titel
Text 2 Text


Reader:
Code: [AUSKLAPPEN]

file = loadfile( "textfile.txt" )
anzahl = readline( file )
dim texte( anzahl, 1 ) ; 0 = titel, 1 = text
blubb = readline( file ) ;weil leerzeile
for number = 1 to anzahl
texte( number, 0 ) = Readline( file )
texte( number, 1 ) = readline( file )
blubb = readline( file )
next


Kann sein das da nen paar fehler drin sind, aber im Grunde genommen musst du die Daten nur mit einer Schleife auslesen Wink
Edit: Wenn du mehrere Zeilen in einem Text haben willst musst du das dim einfach vergrößern und vor den verschiednene texten einfach eine variable setzen die die anzahl der zeilen im text enthäkt
 

Andy S

BeitragMo, Apr 05, 2004 16:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich glaube ich habe mich falsch ausgedruckt, ich will nicht alle Texte Laden sondern aus sagen wir 20 Nachrichten, die 14. Nachricht!


Andy

TheShadow

Moderator

BeitragMo, Apr 05, 2004 16:56
Antworten mit Zitat
Benutzer-Profile anzeigen
du musst solange lesen bis deine nachricht kommt - es sei denn, deine nachrichten habe fixe länge.... (dann kannst du seekfile nehmen)
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2
 

onlyRead

BeitragMo, Apr 05, 2004 18:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Andy S hat Folgendes geschrieben:
Ich glaube ich habe mich falsch ausgedruckt, ich will nicht alle Texte Laden sondern aus sagen wir 20 Nachrichten, die 14. Nachricht!


Andy


Naja, sobal alle Daten im Array gelandet sind ( Text( Nummer ) ), ist das ja nun schon gelöst. Wenn man beispielweise die 14. Nachricht ausgeben will sagt man einfach

Code: [AUSKLAPPEN]

print Text$( 14, 0 ) ;Titel
For x = 1 To Text$( 14, 1 ) ;, 1 enthält die Anzahl der Zeilen
print Text$( 14, 1 + x ) ;Die einzelnen Zeilen ausgeben
Next


Edit: Ach mist, meinst du das wenn eine Nachricht ausgegebn wird man anhand des Textes feststellen kann was das für ne numer ist oder was?

Hubsi

BeitragMo, Apr 05, 2004 18:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich glaube Du wilst bei jeder auszugebenden Nachricht in der Datei rumhantieren, halte ich aber nicht für eine gute Lösung. Machs wie schon gesagt mit Arrays, also alles laden und im Array speichern. Ist das einfachste.

Oder meinst Du nur z.B. 14. Nachricht? Dann gehts so:
Code: [AUSKLAPPEN]
For a=1 To 14
  nachricht$=ReadString( filehandle )
Next

Schwups, schon ist in nachricht$ die 14. gespeichert Smile
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

BladeRunner

Moderator

BeitragDi, Apr 06, 2004 7:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde Dir empfehlen, eine Art "Stopzeichen" zu definieren, welches du alleine in einer Zeile speicherst, zum Beispiel "*". Dann kannst Du dich durch dein File hangeln (von * zu *) und so die Nachrichten auszählen.
Zeitsparende Alternative (aber dafür aufwändiger v.a. bei Änderungen) wäre es, in einem Arrey die ZeilenNummer der Titel der einzelnen Nachrichten zu speichern.

Code: [AUSKLAPPEN]

;Beispiel zu 1.:
nummer_gewuenscht=4 ;nur als Bsp.
repeat
text$=readline(dateihandle)
if text$="*" then
    nummer_aktuell=nummer_aktuell+1
    titel_marker=1
else
    if nummer_aktuell=nummer_gewuenscht then
        if titel_marker then
            text 0,0,"Titel: "+text$
        else
            text 0,15*nummer_aktuell,text$
        end if
        titel_marker=0
    end if
end if
until nummer_aktuell=nummer_gewuenscht
nummer_aktuell=0
; alles schön aufgeräumt und weiter im text ...
; Achtung: eine Prüfung auf die maximale Anzahl der Nachrichten fehlt noch.


Code: [AUSKLAPPEN]
;Bsp. zu 2.
Dim Anzahl_news(9) ;10 verschiedene News vorhanden

restore newsfeld

for i =0 to 9
    read anzahl_news(i)
next
;hier dann auslesen der Datei mittels readline sooft bis die Startzeile erreicht ist.
; Beginn der nächsten Nachricht markiert Ende der Vorherigen. Bei der letzten nachricht: EoF
.newsfeld
data 0,4,9,15,17,23,28,32,35,42  ;hier stehen die startZeilen der News
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
 

Andy S

BeitragDi, Apr 06, 2004 8:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Super Ideen Leute, aber ich glaube ich mache doch pro Nachricht eine Datei(lässt sich besser händeln).

Trotzdem Danke Leute für die Ideen.


Gruß Andy S

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group