Problem: Verzeichnis auslesen und Datei anlegen

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Asobi

Betreff: Problem: Verzeichnis auslesen und Datei anlegen

BeitragDi, Nov 16, 2010 0:26
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzBasic: [AUSKLAPPEN]
	Repeat
verz = ReadDir("maps")
found = False
dateiname$ = "MAP" + dateinamecount
Repeat
datei$ = NextFile(verz)
If datei$ = "" Then found=True:Exit
If datei$ = dateiname$ Then Exit
Forever
CloseDir verz
If found = False Then dateinamecount = dateinamecount + 1:Else Exit
Forever


Ziel ist es, eine datei anzulegen die map1, map2 usw heißt.
Ich denke mal der code sollte an sich selbsterklärend sein.

Problem bei der Sache ist, das mir keine neue Datei angelegt wird, obwohl schon eine
mit dem gewünschten Namen vorhanden ist, hat einer ne idee, warum das so ist ?
Oder besser noch: einen anderen lösungsvorschlag ?^^

Danke schonmal im vorraus und sry für falsche herangehensweisen un so, bin noch nicht so lange
am coden mit bb Wink

mfg Asobi
<@Exorzist> Die Intilligenz von Menschen lässt sich an ihren Fragen feststellen <@huhu> Hä?

Ana

BeitragDi, Nov 16, 2010 0:46
Antworten mit Zitat
Benutzer-Profile anzeigen
ich glaube die datein brauchen für windows eine .sonstwas endung aber bin mir nicht sicher, außerdem ermittelst du in diesem schritt ja nur den namen der vorhanden datein, eingelesen wird da noch nichts oder?

Einlesen musst du auch manuell machen und zwar in der selben reihenfolge wie du es abgespeichert hast. Beispielsweise so:

BlitzBasic: [AUSKLAPPEN]

Function Save_map(Dateiname$)
stream = WriteFile(".\Maps\" + Dateiname + ".map")
WriteInt(stream,breite)
WriteInt(stream,hoehe)
For i = 0 To breite
For j = o To hoehe
WriteInt(steam,map_wert(i,j))
Next
Next
CloseFile(stream)
End Function

funciton Load_Map(Dateiname$)
stream = ReadFile(".\Maps\" + Dateiname + ".map")
breite = ReadInt(stream)
hoehe = WriteInt(stream)
For i = 0 To breite
For j = o To hoehe
map_wert(i,j) = ReadInt(stream)
Next
Next
CloseFile(stream)
End Function


Dann wird auch eine neue Datein angelegt oder eine bestehende ersetzt, was du geschrieben hast, kannst du verwenden um festzustellen ob es eine datei gibt, und dann die load function drauf an wenden

außerdem solltest du noch mit dem right befehl nach der richtigen endung schauen, sonst wird alles mögliche geladen vorallem das "." und ".." sollten dann probleme machen, aber du hast keinen unterordner angegeben also wird auch die exe opfer deiner function. falls du einen unterordner maps hast musst du es ".\maps" angeben. dieses ".\" gibt an das von dem verzeichnis der exe datei der pfad angegeben wird.
Don't only practice your art,
but force your way into its secrets,
for it and knowledge
can raise human to divine

Hubsi

BeitragDi, Nov 16, 2010 0:55
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzBasic: [AUSKLAPPEN]
If found = False Then dateinamecount = dateinamecount + 1 Else Exit


Der Doppelpunkt ist Mr. Green Bullshit Mr. Green Desweiteren müßte beim finden der Datei (If datei$ = dateiname$) found auf True gesetzt werden? Das sind jetzt mal die zwei Sachen die mir beim überfliegen auffallen.
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Asobi

BeitragDi, Nov 16, 2010 0:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Beim auslesen der Namen braucht man in meiner Funktion keine Endung angeben, und er liest den Ordner "maps" aus, dort befindet sich auch keine .exe datei oder ähnliches.

Die Datei soll auch nicht überschrieben werden, falls der name gleich ist.

wenn sich im ordner zb

MAP1.txt
MAP2.txt
MAP3.txt

befinden, soll er die schleife so lange durchgehen bis MAP4.txt ermittelt wird.
Da es die nicht gibt, soll er die unter diesem namen anlegen.
<@Exorzist> Die Intilligenz von Menschen lässt sich an ihren Fragen feststellen <@huhu> Hä?

Asobi

BeitragDi, Nov 16, 2010 0:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Hubsi hat Folgendes geschrieben:
Desweiteren müßte beim finden der Datei (If datei$ = dateiname$) found auf True gesetzt werden?


true wird gesetzt, sobald der generierte name NICHT vorhanden ist im angegebenen ordner "maps".
so war es jedenfalls gedacht ^^ er bricht die erste schleife ja erst ab sobald sie auf true ist und fängt dann an, unter diesem generierten namen zu speichern.

EDIT: sry für doppelpost, hab die edit-funktion nicht gefunden :S

NOCH EIN EDIT:

habs geschafft, musste doch iwie die endung zwischendurch geprüft werden^^

BlitzBasic: [AUSKLAPPEN]
	Repeat
verz = ReadDir("maps")
found = False
dateiname$ = "MAP" + dateinamecount
Repeat
datei$ = NextFile(verz)
If datei$ = dateiname$ + ".txt" Then Exit
If datei$ = "" Then found=True Exit
Forever
CloseDir verz
If found = False Then dateinamecount = dateinamecount + 1 Else Exit
Forever


danke für eure Hilfe Smile
<@Exorzist> Die Intilligenz von Menschen lässt sich an ihren Fragen feststellen <@huhu> Hä?
  • Zuletzt bearbeitet von Asobi am Di, Nov 16, 2010 1:25, insgesamt einmal bearbeitet

Holzchopf

Meisterpacker

BeitragDi, Nov 16, 2010 1:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Asobi hat Folgendes geschrieben:
hab die edit-funktion nicht gefunden :S

Die findest du oben rechts an jedem deiner Beiträge, versteckt hinter dem Edit-(user posted image)-Symbol

mfG
Holzchopf
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

Dice of Darkness

BeitragDi, Nov 16, 2010 14:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich weiß nicht, ob ich das Problem richtig verstanden habe, aber meiner Meinung nach kann man das ganze viel einfacher machen:

Zitat:
Beim auslesen der Namen braucht man in meiner Funktion keine Endung angeben, und er liest den Ordner "maps" aus, dort befindet sich auch keine .exe datei oder ähnliches.

Die Datei soll auch nicht überschrieben werden, falls der name gleich ist.

wenn sich im ordner zb

MAP1.txt
MAP2.txt
MAP3.txt

befinden, soll er die schleife so lange durchgehen bis MAP4.txt ermittelt wird.
Da es die nicht gibt, soll er die unter diesem namen anlegen.


Du willst innerhalb des Ordners "maps" eine Datei suchen bzw. herausfinden, ob es sie gibt. Diese Maps haben alle den Namen "MAP" und eine Nummer dahinter (dateinamecount, nehme ich an). Du kannst doch einfach den Befehl FileType auf die Map anwenden, nach der du suchst. Dann musst du nicht alle Einträge durchlaufen. Das sollte in etwa so klappen:

BlitzBasic: [AUSKLAPPEN]
If FileType(".\maps\MAP" + dateinamecount + ".txt") = 1 Then dateinamecount = dateinamecount + 1    ;Nummer am Ende erhöhen

stream = WriteFile "(...)"
(Code, was da reingeschrieben werden soll)
CloseFile stream


Damit kannst du aber natürlich nur neue Maps mit ner höheren Nummer erzeugen, also nicht irgendwie erst ne Map1 und dann ne Map4, und später noch eine Map2, sondern immer mit aufsteigender Nummer am Ende.

Ich hoffe, dass das in etwa dem entspricht, was du machen wolltest Wink.

MfG Dice
Gratis Spiele, Musik, Tools

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group