Problem beim Auslesen einer .txt Datei
Übersicht

VindurBetreff: Problem beim Auslesen einer .txt Datei |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Nabend,
Wie erwähnt plagt mich das Auslesen von Dateien. (Ich nahm einfach mal .txt) Ich wollte irgendwie herausfinden, wie BladeRunner in seinem Spiel "MiniHack" die Karten ausliest, in denen ja nur Zahlen stehen. Also hab ich mir eine .txt Datei erstellt und einen Code zum auslesen geschriebe, welcher jedoch fehlerhaft ist. Nun weiss ich nicht was genau der Fehler ist und wie ich ihn beheben kann. Der Inhalt der .txt Datei ist folgender: Code: [AUSKLAPPEN] 010101 121212 232323 343434 454545 565656 Und der Code dieser: Code: [AUSKLAPPEN] Dim map(6,6) filein = ReadFile("Karte.txt") For x = 0 To 5 For y = 0 To 5 map(x,y) = ReadInt(filein) Next Next Print map(x,y) WaitKey() CloseFile filein Hoffe mir kann dabei jemand helfen. |
||
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
Auch mit WriteInt reingeschrieben? | ||
gigi |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hast du den Inhalt der .txt Datei genauso kopiert?
Denn dann sollte es mich nicht wundern das es nicht klappt,normal sieht der Inhalt einer solchen Datei eher so aus Code: [AUSKLAPPEN] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 |
||
Anfänger Tut von mir:
http://www.blitzforum.de/forum...hp?t=26185 |
Vindur |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@The_Nici
Nein. Das möchte ich ja umgehen, weil es kein Sinn macht im selben Code eine map zu schreiben und auszulesen, da ich ihn dann auch gleich direkt von Hand setzen kann. Hab es jedoch vorher schonmal mit WriteInt versucht, aber hab es wohl falsch angewendet. @gigi Normalerweise schon, aber bei den Karten von BladeRunner stehen auch ganz normale Zahlen ohne Punkt und Komma in der Datei.(Welche jedoch eine .map war) |
||
gigi |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das seine Dateien .map heißen tut nichts zur Sache.
Ich frage mich wie er das sonst gelöst hat? Frag ihn doch mal! GIGI |
||
Anfänger Tut von mir:
http://www.blitzforum.de/forum...hp?t=26185 |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ein Integer besteht aus 4 Bytes. Deine Zahlen dagegen bestehen aus 6 Bytes in erweiterten ASCII-Zeichensatz. Du mußt dich also entscheiden ob du die Zahlen mit WriteInt da rein schreibst und auch so wieder ausliesst. Wobei sie dann nicht vom Texteditor bearbeitet werden können. Oder die Zeilen mit ReadLine einliesst und dann die einzelnen Strings in echte Zahlen umwandelst. | ||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
In der Textdatei befindet sich... Text! Auch wenn Ziffern darin stehen, sind es immer noch Strings. Du ließt die Zahlen als Text ein und wandelst das passende Stück in eine Zahl um:
Code: [AUSKLAPPEN] Local txt$="100"
Local i = Int(Left(txt$, 2)) Print i WaitKey() Edit Code korrigiert... wo hab ich bloß den Kopf... |
||
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Vindur |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Okay danke^^. Die Zahlen werden angezeigt, aber ein neues Problem tritt auf. Und zwar bin ich nicht sicher, wie ich auf die einzelnen Zahlen zugreifen kann bzw. sie einem Bild als Frame zuzuordne. | ||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe ganz schnöde und profan mit readline![]() ![]() Der Unterschied ist wie schon erwähnt dass readint wirklich den direkten Zahlenwert speichert, was für Menschen oft nicht lesbar ist. Strings sind leichter zu lesen, aber oft verschwenderischer was den Platz angeht. Ich hoffe das half. |
||
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 |
![]() |
TimBo |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
habe auch den Fehler gemacht und habe so Daten in einen Editor geschrieben. Wenn es eine Map ist, die eh nicht verändert werden soll, dann lass dir von einem Programm die Datei schreiben. schau dir also die Befehle Openfile WriteInt WriteByte ReadInt und WriteInt das ist viel einfacher. Die Daten können aber nur mit Write und ReadBefehlen verändert werden. Um an einen Ort der Datei zu gelangen schau dir SeekFile an. Viele Grüße TimBo |
||
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31 hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht. |
Vindur |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke BladeRunner. Mit dem Mid Befehl habe ich nun rumgespielt und konnte somit die Zeichen pro Zeile steuern. Wenn ich aber einen Delay einbaue, muss ich feststellen, dass immer Zeile für Zeile dargestellt wird. Und wenn ich zusätzlich Len verwende zeigt er mir lediglich die Anzahl an Zeichen pro Zeile an. Hilfreich war es aber trotzdem, muss jetzt nur etwas am code fummeln und dann wird das schon. ![]() |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich bin grad in so einer Laune, dass ich Kurzprogramme schreibe. Hier mal ein kleiner Editor der sowohl laden als auch speichern kann. Mit dem Mausrad lassen sich die Werte pro Tile ändern. Über die erste Konstante kann man auch die Mapauflösung angeben.
Code: [AUSKLAPPEN] Graphics 512,512,0,2
SetBuffer BackBuffer() Const Tiles%=4 ;Hier die lineare Anzahl Tiles angeben Const Datei$="c:\blub.dat" ;Hier den Datennamen eintragen Const TileSize#=512.0/Tiles Dim Map(Tiles-1,Tiles-1) Local Timer%=CreateTimer(50) Local MX%,MY%,MW% Local X%,Y% Local File% While Not KeyHit(1) MX=Floor(MouseX()/TileSize) MY=Floor(MouseY()/TileSize) MW=MouseZSpeed() For Y=0 To Tiles-1 For X=0 To Tiles-1 Color 120,120,120: Rect X*TileSize,Y*TileSize,TileSize,TileSize,0 Color 240,240,120: Text X*TileSize,Y*TileSize,Map(X,Y) Next Next Color 255,255,255: Rect MX*TileSize,MY*TileSize,TileSize,TileSize,0 Map(MX,MY)=Map(MX,MY)-MW If Map(MX,MY)>255 Then Map(MX,MY)=255 If Map(MX,MY)<0 Then Map(MX,MY)=0 ;[F1]LOAD If KeyHit(59) Then If FileType(Datei)<>1 Then RuntimeError "Datei gibt es noch garnicht!" File=ReadFile(Datei) For Y=0 To Tiles-1 For X=0 To Tiles-1 Map(X,Y)=ReadByte(File) Next Next CloseFile File Print "GELADEN" Delay 1000 End If ;[F2]SAVE If KeyHit(60) Then File=WriteFile(Datei) For Y=0 To Tiles-1 For X=0 To Tiles-1 WriteByte(File,Map(X,Y)) Next Next CloseFile File Print "GESPEICHERT" Delay 1000 End If WaitTimer Timer Flip 0 Cls Wend End Nur um zu zeigen, dass ein Notepad-rumgefuchtel im grunde keinen Sinn ergibt, wenn man eh mit Dateien rumhantieren will. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
Vindur |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Vielen Dank hectic!
Ich denke mal ich werde maps solange mit einem Editor erstellen bis mir mal ein Geistesblitz kommt.^^ Aber in einem Editor scheint es anschaulicher zu sein als in einer Textdatei. Nochmals vielen Dank an alle. ![]() |
||
![]() |
TimBo |
![]() Antworten mit Zitat ![]() |
---|---|---|
ja. Das ist der eine Vorteil eines Mapeditors.
Denn was ist wenn du später CollisionLines ; Verschiedene Tile reaktionen etc mit in die Datei speichern willst. Dann wird es arg strange mit dem Win NotePad. |
||
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31 hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht. |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hectic hat auch selbstredend vollkommen recht. Bei minihack wurde v.a. deshalb kein Editor benutzt weil es ja ein ungeplantes Experiment war, um mit Reflection rumzuspielen. Ich hätte ehrlich gesagt anfangs nicht erwartet dass es mal solche Dimensionen annimmt. | ||
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 |
Vindur |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Es ist leider beim Auslesen der durch den Editor erstellten Datei ein Problem aufgetreten. Und da ich deswegen nicht gleich einen neuen Thread öffnen möchte, schildere ich es hier.
Alsoooo...Es wird alles korrekt geladen und angezeigt.Nun habe ich den Zahlwerten einen Colorbefehl zugewiesen der sich auf das zu zeichnende Rect auswirkt. Auch das klappt wunderbar. Jedoch tritt nach einiger Zeit ein Error auf, welcher da besagt "Stream does not exist!" und im Debugger wird die Zeile "Map(x,y) = ReadByte(File)" markiert. Warum tritt nach einigen Durchläufen der selben Operation plötzlich ein Fehler auf? Und warum erkennt das Programm die Datei nichtmehr? Der Code lautet wie folgt: Code: [AUSKLAPPEN] Graphics 640,480,32,0 SetBuffer BackBuffer() Const tiles% = 10 Const tilesize = 10 Const Datei$="Karte.map" Dim Map(Tiles-1,Tiles-1) Global px,py timer = CreateTimer(50) While Not KeyHit(1) WaitTimer(timer) load() move() Color 255,255,255 Text px,py,"X" Flip:Cls Wend End Function load() File=ReadFile(Datei) For Y=0 To tiles-1 For X=0 To tiles-1 Map(X,Y)=ReadByte(File) Color map(x,y)*50,map(x,y)*50,map(x,y)*50 Rect x*TileSize,y*TileSize,TileSize,TileSize Next Next End Function Function move() If KeyHit(205) px = px + TileSize ElseIf KeyHit(203) px = px - TileSize ElseIf KeyHit(200) py = py - TileSize ElseIf KeyHit(208) py = py + TileSize EndIf End Function |
||
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich denke es liest eine Zeile aus die es gar nicht mehr gibt.
Also sind es zu wenig zeilen in der txt datei oder du liest zu viele raus. Hoffe es ist verständlich. (vlt hilft dir der Befehl EOF) Bitte verbessert mich wenn ich müll laber ![]() |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
Vindur |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Habs vorher bereits mit Eof versucht und auch einmal mit SeekFile, aber der Fehler bleibt.
EDIT: Wenn ich EoF oder SeekFile nutze wird der Fehler bereits dort angezeigt. Ich habe das Gefühl, dass er die Datei schlichtweg nichtmehr findet oder ignoriert, weil er sie ja ständig öffnet. O.o EDIT2: Ich glaube es hat sich erledigt. Habe hinter die For-Next Schleife den Closefile Befehl angefügt und nun scheint der Fehler nichtmehr aufzutreten. Kann es denn wirklich sein, dass die Datei ignoriert wurde?? |
||
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja das kann sein wen die Datei 29438 mal offen ist das die Datei nicht mehr verfügbar ist ![]() |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Man Lädt auch grundsätzlich nichts innerhalb der Hauptschleife... | ||
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group