For/Next schleife für Dateien

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Alkan

Betreff: For/Next schleife für Dateien

BeitragMo, Jan 25, 2010 21:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi leute! Razz
Also ich wollte mal Lines aus einer Datei auslesen
doch damit ich ja nicht alles 1000 Zeilen mit ReadLine einzeln auslesen muss
wollte ich eine For/Next Schleife einbauen
Doch da liest und zeigt es ja immer nur die 1.Zeile
Ich hab auch mal nachgesehen ob es eine Funktion gibt die die anzahl der lines ermittelt
doch ich hab nichts gefunden
Ich wer froh wenn ihr mir helfen könnt
Danke im vorraus
MfG
Alkan

Edit:Ok!
Dann ist hier mal der Code:
Code: [AUSKLAPPEN]
Graphics 640,480,0,2
Global filename$
Print "Press Enter to continiue"
Repeat
If KeyDown(28)Then filenam()


Until KeyHit(1)
End


Function mode()
modus%=Input("Select Mode (1=Read,2=Write): ")
Select modus%
Case 1
readfi
Case 2
writefi
Default 
Print "Please Select Mode 1 or Mode 2!"
End Select
End Function

Function filenam()
FlushKeys
filename$=Input("FileName(+FilePos): ")
filename$=filename$+".package"
mode()
End Function

Function readfi()
file=ReadFile(filename$)
If file=0 Then Print "File does not exist!"
For i=0 To Eof(file)
dd$=ReadLine(file)
Next
For i=0 To Eof(file)
Print dd$
Next
End Function

Function writefi()
End Function


P.S. Hab fast alle Smileys entfernt

Edit:oh..habs grade gelöst!
Hab das wohl übersehen https://www.blitzforum.de/help/Eof
Und danke an euch!
Edit:Und da wäre noch eine Frage:
Wie kann man den Error balken abschalten?
Ich hab schon folgendes probiert:
Code: [AUSKLAPPEN]
If file=0 then Runtimeerror=false

Also dass da dann nicht mehr Error!Stream does not exist!"steht und das programm endet sondern dass es im Programm steht und nicht endet?
MfG
Alkan
Hauptrechner: Win7 Ultimate x64|AMD Phenom II X4 965 BlackEdition 4x3.4GHz|4 GB DualKit DDR3-1600 Ram|1.5 TB Samsung EcoGreen|Cougar CM 700Watt|ASRock M3A790GFX/120M|Nvidia GeForce 9500GT|Ati Radeon HD3300(Onboard-Deaktiviert)
Server(früher Hauptrechner): Ubuntu 9.1 x86|Intel P4 HT 3GHz|Ati Radeon X600Pro|200 GB HDD
Worklog: Planetensimulation
Homepage(Under Construction): alkan96.dyndns.org
Wenn schon falsch, dann richtig falsch.
  • Zuletzt bearbeitet von Alkan am Mo, Jan 25, 2010 22:11, insgesamt 4-mal bearbeitet

Xeres

Moderator

BeitragMo, Jan 25, 2010 21:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Weniger Smiliys und mehr Erklärung was du machen möchtest, wäre hilfreich.
Eine Datei endet bei EoF - End of File. Oder möchtest du eine Datei nur teilweise einlesen?
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)

Nicdel

BeitragMo, Jan 25, 2010 21:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich versteh das auch nicht so ganz. Aber Glückwunsch, so viele verschiedene Smilies in einem Beitrag hat bisher noch keiner geschafft.

Edit:
Was heißt nur die erste Zeile? Normalerweise werden die Zeilen nacheinander ausgelesen, egal ob Schleife oder nicht.
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

Alfadur

BeitragMo, Jan 25, 2010 21:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du jede Zeile nur in deiner dd Variable speicherst, wird die Variable natürlich jedesmal überschrieben.
Wenn du es unbedingt in zwei For Schleifen machen mußt, dann mußt du alle Zeilen in ein Array z.B. einlesen.
Oder du setzt das readline und das print in dieselbe For Schleife...
A Cray is the only computer that runs an endless loop in less than four hours.

Thunder

BeitragMo, Jan 25, 2010 22:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Ganz klar:

Code: [AUSKLAPPEN]
Function readfi()
file=ReadFile(filename$)
If file=0 Then Print "File does not exist!"
For i=0 To Eof(file)
dd$=ReadLine(file)
Next
For i=0 To Eof(file)
Print dd$
Next
End Function



Hier liegt der Fehler begraben. Du liest erstmal alle Zeilen nacheinander in die Variable dd(was für ein Name Very Happy). Aber die Variable dd merkt sich nur die letzte Zeile. Später bekommst du dann auch nichts mehr ausgegeben, weil das Ende der Datei schon erreicht ist.

Das könnteste folgendermaßen lösen:
Code: [AUSKLAPPEN]
Function readfi()
  file=ReadFile(filename$)
  If file=0 Then Print "File does not exist!"
  Repeat
     Print ReadLine(file)
  Until Eof(file)
End Function


So sparst du dir die Variable. Da die Zeile, die aus der Datei gelesen wird direkt an Print weitergegeben wird. Eof funktioniert, soweit ich weiß, nicht mit For, da es entweder 1 oder 0 zurückgibt.
1= Ende der Datei erreicht
0= Ende nicht erreicht

Wenn du die Werte später noch gespeichert brauchst, wirst du Dim verwenden müssen.

mfg Thunder


Edit: zu spät.
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit
  • Zuletzt bearbeitet von Thunder am Mo, Jan 25, 2010 22:08, insgesamt einmal bearbeitet

Xeres

Moderator

BeitragMo, Jan 25, 2010 22:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
For i=0 To Eof(file)
Dann schau dir in der OH nochmal an, welche Werte Eof zurückliefert. Zeilen sind das nicht!

Es ginge...
Code: [AUSKLAPPEN]
Repeat
Print(ReadLine(file))
Until Eof(file)
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)

Thunder

BeitragMo, Jan 25, 2010 22:06
Antworten mit Zitat
Benutzer-Profile anzeigen
sorry - falscher Button
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

Midimaster

BeitragMo, Jan 25, 2010 22:29
Antworten mit Zitat
Benutzer-Profile anzeigen
ich empfehle mal das Datei-Lesen Tutorial:

https://www.blitzforum.de/foru...hp?t=33651


und vielleicht noch das DIM-Tutorial:

https://www.blitzforum.de/foru...048#354048

beanage.johannes

BeitragDi, Jan 26, 2010 16:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Ein while/wend loop eignet sich besser als repeat/until oder for/next

Xaymar

ehemals "Cgamer"

BeitragDi, Jan 26, 2010 18:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Wo unterscheidet sich while/wend von repeat/until, außer das die abfrage ob die bedingung zutrifft beim ersten am anfang steht und beim zweiten am ende?
Warbseite

Chrise

BeitragDi, Jan 26, 2010 18:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Cgamer hat Folgendes geschrieben:
Wo unterscheidet sich while/wend von repeat/until, außer das die abfrage ob die bedingung zutrifft beim ersten am anfang steht und beim zweiten am ende?


genau da ist de unterschied. Manchmal musst du am Ende der schleife wissen, ob eine bedingung erfüllt ist, damit die schleife beendet wird.
Manchmal musst du wissen, ob eine schleife überhaupt erst beginnen soll.
Llama 1 Llama 2 Llama 3
Vielen Dank an Pummelie, der mir auf seinem Server einen Platz für LlamaNet bietet.

BladeRunner

Moderator

BeitragDi, Jan 26, 2010 18:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist im Wesentlichen der Unterschied:
Code: [AUSKLAPPEN]

a=10
While a < 10
   a = a+1
   Print "while:"+a
Wend

b=10
Repeat
   b = b+1
   Print "repeat:"+ b
Until b>=10
WaitKey()

Repeat wird mindestens einmal durchlaufen, while nicht unbedingt.
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

Xaymar

ehemals "Cgamer"

BeitragDi, Jan 26, 2010 18:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Gut zu wissen. Dann weiß ich jetzt auch warum mein Programm ständig crasht.
Warbseite

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group