Unbekannte Zeilenanzahl
Übersicht

![]() |
Der EisvogelBetreff: Unbekannte Zeilenanzahl |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. |
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kleiner Tipp
Setbuffer nich in ner Schleife! |
||
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sorry, Replace funktioniert mit Text nicht ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Edit :OK | ||
![]() |
Lunatix |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Junkproggeer: Ich würde halt die neue Zeile als neue Zeile in de Datei schreiben! Dann wird auch nicht über den Bildschirmrand geschrieben. | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group