Sortier Fehler
Übersicht

HahninatorBetreff: Sortier Fehler |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
Also ich schreibe zur Zeit an einen RPG-maker klon, scheitere aber schon an dem Sortieren der Bilder, naja die Funktion soll neue Bilder Hintenran stellen und gelöschte Bilder durch eine Leerzeile ersetzen....das hintenran stellen Funktioniert einwandfrei, nur bei löschen treten Probleme auf. Und zwar vollgendes. wenn das letzte Bild, das in der Datei Steht lösche, Funktioniert es so wie es soll, aber umsobald ich ein Bild lösche was weiter Vorn steht, wird es zwar durch eine Leerzeile Ersetzt aber die zwei letzten Bilder wechseln sich immer ab... so sieht die Datei vorm Start aus Zitat: beach tileset.bmp big wall iso tileset 3.bmp castle iso tileset.bmp Neu Bitmap (2).bmp Neu Bitmap.bmp Jetzt lösche ich "castle iso tileset.bmp" 1. Start Zitat: beach tileset.bmp big wall iso tileset 3.bmp Neu Bitmap (2).bmp 2. Start Zitat: beach tileset.bmp big wall iso tileset 3.bmp Neu Bitmap.bmp 3. Start Zitat: beach tileset.bmp big wall iso tileset 3.bmp Neu Bitmap (2).bmp usw... usw...usw Code: [AUSKLAPPEN] Function Tileset_sortieren() ; Ersteinmal schauen wie viele Daten in der Datei sind Local Tileset_Datei$[100000] Local Tileset_Ordner$[100000] Local Tileset_Datei_Vor[100000] Local Tileset_Ordner_Vor[100000] Local Tileset$[100000] Datei = ReadFile("Daten\Tilesets.txt") Anzahl_Tileset_Datei = ReadInt(Datei) For I=1 To Anzahl_Tileset_Datei Tileset_Datei[I] = ReadLine(Datei) Tileset_Ordner_Vor[I] = 1 Next ; Danach die anzahl der Tatsächlich Vorhandenen Ermitteln Ordner = ReadDir("GFX\Tilesets") Repeat Nert$ = NextFile(Ordner) If Instr(Upper(Nert),"BMP") > 0 Or Instr(Upper(Nert),"PNG") > 0 Then Anzahl_Tilesets_Ordner = Anzahl_Tilesets_Ordner + 1 Tileset_Ordner[Anzahl_Tilesets_Ordner] = Nert Tileset_Ordner_Vor[Anzahl_Tilesets_Ordner] = 1 EndIf Until Nert = "" CloseFile(Datei) CloseDir(Ordner) ; Danach Beides Addieren und ein Dim erstellen Anzahl_Tileset = Anzahl_Tilesets_Ordner + Anzahl_tileset_Datei ; Danach schauen welche Daten Bilder Noch Vorhanden sind For I=1 To Anzahl_Tileset_Datei For J=1 To Anzahl_Tilesets_Ordner If Tileset_Datei[I] = Tileset_Ordner[J] Then Tileset[I] = Tileset_Ordner[J] Tileset_Ordner_Vor[J] = 0 Tileset_Datei_Vor[I] = 0 Anzahl = Anzahl + 1 Anzahl_Tileset = Anzahl_Tileset - 1 Exit EndIf Next If Tileset_Datei_Vor[I] = 1 Then Tileset_Datei[I] = "" Tileset[I] = "" EndIf Next Dim Tileset_Bilder$(Anzahl_Tileset) ; Danach die neuen Bilder Hinterran stellen For I=1 To Anzahl Tileset_Bilder(I) = Tileset[I] Next For I=1 To Anzahl_Tilesets_Ordner If Tileset_Ordner_Vor[I] = 1 Then Anzahl_2 = Anzahl_2 + 1 Tileset_Bilder(Anzahl + Anzahl_2) = Tileset_Ordner[I] EndIf Next ; Danach wieder in die Datei schreiben Datei = WriteFile("Daten\Tilesets.txt") WriteInt Datei, Anzahl_Tileset For I=1 To Anzahl_Tileset Print Tileset_Bilder(I) WriteLine Datei, Tileset_Bilder(I) Next End Function |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bei unbekannten Datenmengen sollte man auf Types setzten, 50.000 Variablen zu reservieren ist nicht unbedingt das non-plus Ultra. Damit ließe sich die Sortiererei auch recht einfach gestallten. | ||
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) |
Hahninator |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich habe meinen Fehler gefunden, Ich musste am Anfang der Function die Variable "Anzahl" mit 1 deklarieren... naja kann geclosed werden
Code: [AUSKLAPPEN] Function Tileset_sortieren() ; Ersteinmal schauen wie viele Daten in der Datei sind Local Tileset_Datei$[100000] Local Tileset_Ordner$[100000] Local Tileset_Datei_Vor[100000] Local Tileset_Ordner_Vor[100000] Local Tileset$[100000] Local Anzahl = 1 ;<-----------------------------------------hier Datei = ReadFile("Daten\Tilesets.txt") Anzahl_Tileset_Datei = ReadInt(Datei) For I=1 To Anzahl_Tileset_Datei Tileset_Datei[I] = ReadLine(Datei) Tileset_Ordner_Vor[I] = 1 Next ; Danach die anzahl der Tatsächlich Vorhandenen Ermitteln Ordner = ReadDir("GFX\Tilesets") Repeat Nert$ = NextFile(Ordner) If Instr(Upper(Nert),"BMP") > 0 Or Instr(Upper(Nert),"PNG") > 0 Then Anzahl_Tilesets_Ordner = Anzahl_Tilesets_Ordner + 1 Tileset_Ordner[Anzahl_Tilesets_Ordner] = Nert Tileset_Ordner_Vor[Anzahl_Tilesets_Ordner] = 1 EndIf Until Nert = "" CloseFile(Datei) CloseDir(Ordner) ; Danach Beides Addieren und ein Dim erstellen Anzahl_Tileset = Anzahl_Tilesets_Ordner + Anzahl_tileset_Datei ; Danach schauen welche Daten Bilder Noch Vorhanden sind For I=1 To Anzahl_Tileset_Datei For J=1 To Anzahl_Tilesets_Ordner If Tileset_Datei[I] = Tileset_Ordner[J] Then Tileset[I] = Tileset_Ordner[J] Tileset_Ordner_Vor[J] = 0 Tileset_Datei_Vor[I] = 0 Anzahl = Anzahl + 1 Anzahl_Tileset = Anzahl_Tileset - 1 Exit EndIf Next If Tileset_Datei_Vor[I] = 1 Then Tileset_Datei[I] = "" Tileset[I] = "" EndIf Next Dim Tileset_Bilder$(Anzahl_Tileset) ; Danach die neuen Bilder Hinterran stellen For I=1 To Anzahl Tileset_Bilder(I) = Tileset[I] Next For I=1 To Anzahl_Tilesets_Ordner If Tileset_Ordner_Vor[I] = 1 Then Anzahl_2 = Anzahl_2 + 1 Tileset_Bilder(Anzahl + Anzahl_2) = Tileset_Ordner[I] EndIf Next ; Danach wieder in die Datei schreiben Datei = WriteFile("Daten\Tilesets.txt") WriteInt Datei, Anzahl_Tileset For I=1 To Anzahl_Tileset ; Print Tileset_Bilder(I) WriteLine Datei, Tileset_Bilder(I) Next End Function |
||
![]() |
Smily |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich würde trotzdem auf types setzen:
Rechenbeispiel: Du intialisiert 5 arrays zu je 100.000 Einträgen -> es werden 500.000 Variablen reserviert Ein INT nimmt 4 bytes. Ein String 4 Bytes + die Länge macht also mindestens 2.000.000 bytes, also 2 Megabyte, die Sinnlos verpulvert werden. |
||
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets "Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!" stummi.org |
Hahninator |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
War das nicht so das Local am ende Der Funktion gelöscht werden? Denn dann ist es im Prinzip egal | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group