Unbekannte Zeilenanzahl

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

Der Eisvogel

Betreff: Unbekannte Zeilenanzahl

BeitragDo, Jan 03, 2008 21:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo
man kann ja mit
Code: [AUSKLAPPEN]
ReadLine

Zeilen aus einer Datei auslesen, aber man muss für jede Zeile die man auslesen will "ReadLine" schreiben. Ich möchte aber dass wenn ich in eine Datei beliebig viele Zeilen schreibe und diese anschließend auslesen möchte nicht dass ich bei 10 Zeilen 10 mal "ReadLine" schreiben muss und bei 5 eben 5 mal.
Natürlich möchte ich diese Zeilen dann auch auf den Bildschirm bringen.
Meine Frage ist kann man das irgendwie machen, gibt es da vielleicht einen Befehl?
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

D2006

Administrator

BeitragDo, Jan 03, 2008 22:05
Antworten mit Zitat
Benutzer-Profile anzeigen
mit ql:Eof kannst du abfragen, ob es noch etwas auszulesen gibt.
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2

Der Eisvogel

BeitragDo, Jan 03, 2008 22:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Kann man auch für jede Zeile z.B. einer andere Farbe oder eine andere Schriftart machen.
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.
 

ChristianK

BeitragDo, Jan 03, 2008 22:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Schriftformatierungen kann man weder in Textdateien noch in Strings speichern.
Du kannst aber zum Beispiel vor jeden String in der Datei einen Integer ( oder Byte ) schreiben, der Informationen zur Formatierung enthält.
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT

Der Eisvogel

BeitragDo, Jan 03, 2008 22:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Das versteh ich nicht.
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.
 

Dreamora

BeitragDo, Jan 03, 2008 22:49
Antworten mit Zitat
Benutzer-Profile anzeigen
In einer Textdatei gibt es keine Farbe, Schriftgrösse oder sonstwas.
Wenn du das willst musst du die Formatierung (wie oben vorgeschlagen) in die Zeile selbst schreiben oder so.

Wie diese Formatierung aussieht ist dir überlassen. Einige nutzen HTML ähnliche Tags zb. Gibt aber auch andere Ansätze wie in LUA etc.

Wie du diese Informationen integrierst hängt vollständig von dir ab, denn du musst sie beim Readline auch wieder herauslesen und verarbeiten.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Lunatix

BeitragFr, Jan 04, 2008 0:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
WriteInt stream, $ff0000
WriteLine stream, "Dies ist ein Text


So schreibst du einen Integer Wert in die Datei, welcher die Farbinformationen enthält und danach einen durch ReadLine auslesbaren Datenblock.

Code: [AUSKLAPPEN]

Local y%,txt$,color%

While not Eof(stream)
  color = ReadInt(stream)
  txt = ReadLine(stream)

  color 0,0,color
  Text 0,y,txt
  y=y+20
Wend


So kannst du den Text farbig wiederausgeben lassen.
Muss natürlich noch ausgebaut werden, wie es beliebt.
[size=9]Pro|gram|mier|er: Ein Organismus, der Koffein in Software umwandelt.
Geben Sie eine beliebige 11-stellige Primzahl ein, um fortzusetzen...

Der Eisvogel

BeitragSa, Jan 05, 2008 18:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo ich hab noch eine Frage.
Ich möchte auch die Schriftgrößeund Fett und Co ändern, ich habe das so versucht:
Code: [AUSKLAPPEN]
credits=ReadFile("data\Credits.tcr")

While Not Eof(credits)
SetBuffer BackBuffer()

hfku$=ReadLine(credits)
farbe$=ReadLine(credits)

h=Mid$(hfku$,1,2)
f=Mid$(hfku$,4,1)
k=Mid$(hfku$,6,1)
u=Mid$(hfku$,8,1)

Arial=LoadFont("Arial",h,f,k,u)
SetFont Arial

r=Mid$(farbe$,1,3)
g=Mid$(farbe$,5,3)
b=Mid$(farbe$,9,3)

Color r,g,b
Text 10,pos_y,ReadLine$(credits)

pos_y=pos_y+75

Wend

CloseFile credits

Leider macht er dann nur die ersten 2 Zeilen, obwohl er 4 Zeilen machen sollte, wieso?
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

blitzuser34

BeitragSa, Jan 05, 2008 18:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Kleiner Tipp

Setbuffer nich in ner Schleife!

Der Eisvogel

BeitragSa, Jan 05, 2008 18:38
Antworten mit Zitat
Benutzer-Profile anzeigen
jetzt macht er 3 Zeilen aber er soll 4 machen.
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

blitzuser34

BeitragSa, Jan 05, 2008 18:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Habs nicht getestet, müsste aber funktionieren!

Code: [AUSKLAPPEN]
test=Loadfile("Credits.txt")

rgb=ReadLine(test)
r=Left$(rgb,3)
g=Mid$(rgb,4,3)
b=Right(rgb,3)
size=ReadLine(test)
fett=ReadLine(test)
kursiv=ReadLine(test)
unterstrichen=ReadLine(test)
message$=ReadLine(test)
message$ = Replace$ (message$, "|", Chr (13) + Chr (10))

CloseFile test

font=LoadFont("Arial",size,fett,kursiv,unterstrichen)
SetFont font

Color r,g,b

SetBuffer BackBuffer()

While Not KeyHit(1)
Cls

Text 0,0,message

Flip
Wend

Der Eisvogel

BeitragSa, Jan 05, 2008 18:59
Antworten mit Zitat
Benutzer-Profile anzeigen
jetzt macht er nur noch eine Zeile.
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

blitzuser34

BeitragSa, Jan 05, 2008 19:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Sorry, Replace funktioniert mit Text nicht Embarassed .

Hier, der funktioniert:

Code: [AUSKLAPPEN]

Dim Message$(10)
Dim r(10)
Dim g(10)
Dim b(10)
Dim size(10)

filein=ReadFile("Datei.txt")

For a=1 To 10

r(a)=ReadLine(filein)
g(a)=ReadLine(filein)
b(a)=ReadLine(filein)
size(a)=ReadLine(filein)
Message$(a)=ReadLine(filein)

Next

CloseFile filein

For a=1 To 10

Color r(a),g(a),b(a)
font=LoadFont("Arial",size(a))
SetFont font
Text 0,y,message$(a)
y=y+StringHeight (message$(a))


Next


Beispiel "Datei.txt"

Code: [AUSKLAPPEN]
0
255
255
20
Test
255
255
255
10
Test
255
255
255
10
Test
255
255
255
10
Test
255
255
255
10
Test
255
255
255
10
Test
255
255
255
10
Test
255
255
255
10
Test
255
255
255
10
Test
255
255
255
10
Test

Der Eisvogel

BeitragSa, Jan 05, 2008 19:50
Antworten mit Zitat
Benutzer-Profile anzeigen
wie mach ich das dann mit Eof?
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

The_Nici

BeitragSa, Jan 05, 2008 19:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
For a=1 To 10

ersetzen mit
Code: [AUSKLAPPEN]
For a=1 To Eof(stream)


EDIT: Nach Junkproggers Anmerkung:
Zitat:
<Junkprogger> Du bist ein Trottel, EOF gibt True oder False zurück >_<

nehme ich den oberen Post zurück.
  • Zuletzt bearbeitet von The_Nici am Sa, Jan 05, 2008 20:15, insgesamt einmal bearbeitet

blitzuser34

BeitragSa, Jan 05, 2008 19:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Datei kann jetzt beliebig lang sein...

Code: [AUSKLAPPEN]
;Anzahl der Zeilen auslesen(für Dim)
filein=ReadFile("Datei.txt")

While Not Eof(filein)

dsfsk=ReadLine(filein)
dsfsk=ReadLine(filein)
dsfsk=ReadLine(filein)
dsfsk=ReadLine(filein)
dsfsk=ReadLine(filein)
dimanz=dimanz+1

Wend

CloseFile filein

Dim Message$(dimanz)
Dim r(dimanz)
Dim g(dimanz)
Dim b(dimanz)
Dim size(dimanz)

filein=ReadFile("Datei.txt")

For a=1 To dimanz

r(a)=ReadLine(filein)
g(a)=ReadLine(filein)
b(a)=ReadLine(filein)
size(a)=ReadLine(filein)
Message$(a)=ReadLine(filein)

Next

CloseFile filein

For a=1 To  dimanz

Color r(a),g(a),b(a)
font=LoadFont("Arial",size(a))
SetFont font
Text 0,y,message$(a)
y=y+StringHeight (message$(a))

Next


@The_nici: Und wie definierst du Dim??? Du brauchst ne Anzahl der Zeilen. Und ne riesige Zahl währe Verschwendung des Speichers!

Der Eisvogel

BeitragSa, Jan 05, 2008 20:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke, jetzt funzt es.
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.
  • Zuletzt bearbeitet von Der Eisvogel am Sa, Jan 05, 2008 20:05, insgesamt einmal bearbeitet

blitzuser34

BeitragSa, Jan 05, 2008 20:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Edit :OK

Lunatix

BeitragSa, Jan 05, 2008 20:21
Antworten mit Zitat
Benutzer-Profile anzeigen
The_Nici, EOF gibt True oder False zurück -_-

Und blitzuser34: Bei dir ists dann wieder so, das der Text über den Bildschirmrand geschrieben wird...

Vor allem braucht man Sachen wie Bold/Italic etc. nicht als "Line" speichern, Line ist nur für Text gedacht. Bold kann nur True oder False sein, weshalb man nur ein Byte braucht. Die Farbe kann man ganz leicht als Hexadezimalen Wert speichern, "Color" unterstützt diese Sogar, indem man die ersten beiden Pararmeter auf "0" setzt und "blue" als Hex. Pararmeter verwendet.

Try this:
Code: [AUSKLAPPEN]
Local stream%
Local txt$
Local y%

txt = "Dies ist ein Credit Eintrag, der Automatisch am Ende des Bildschirmes umgebrochen wird."

If FileType("credits.tcr") <> 1
   stream = WriteFile("credits.tcr")
   WriteBlock(stream,txt,$ff0000,12,True,False,False)
   CloseFile stream
EndIf

Graphics 320,240,32,2
SetBuffer BackBuffer()

stream = ReadFile("credits.tcr")
While Not Eof(stream)
   y=readblock(stream,y)
Wend
Flip
WaitKey
End

Function WriteBlock(stream%,txt$,textcolor%,size%,bold%,italic%,underline%)

   WriteByte stream,size
   WriteByte stream,bold
   WriteByte stream,italic
   WriteByte stream,underline
   WriteInt stream,textcolor
   WriteString stream,txt
   
End Function

Function ReadBlock%(stream%,y%)

   Local size%,bold%,italic%,underline%,length%,txt$,part$,font%,textcolor%

   size=ReadByte(stream)
   bold=ReadByte(stream)
   italic=ReadByte(stream)
   underline=ReadByte(stream)
   textcolor=ReadInt(stream)
   txt = ReadString(stream)
   
   font = LoadFont("arial",size,bold,italic,underline)
   SetFont font
   Color 0,0,textcolor
   
   If StringWidth(txt) >GraphicsWidth()
      For i% = 0 To Len(txt)-1
         part = part + Mid(txt,i+1,1)
         If StringWidth(part) > GraphicsWidth()
            Text 0,y,part
            part=""
            y=y+Float(size)*1.3
         EndIf
      Next
      If part <> ""
         Text 0,y,part
         y=y+Float(size)*1.3
      EndIf
   Else
      Text 0,y,txt
      y=y+Float(size)*1.3
   EndIf
   
   Return y
End Function
[size=9]Pro|gram|mier|er: Ein Organismus, der Koffein in Software umwandelt.
Geben Sie eine beliebige 11-stellige Primzahl ein, um fortzusetzen...

blitzuser34

BeitragSo, Jan 06, 2008 11:29
Antworten mit Zitat
Benutzer-Profile anzeigen
@Junkproggeer: Ich würde halt die neue Zeile als neue Zeile in de Datei schreiben! Dann wird auch nicht über den Bildschirmrand geschrieben.

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group