"Daten-Zusammenfasser" bauen? [GELÖST]

Übersicht BlitzBasic Allgemein

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

 

CO2

ehemals "SirMO"

Betreff: "Daten-Zusammenfasser" bauen? [GELÖST]

BeitragMi, Sep 29, 2010 20:54
Antworten mit Zitat
Benutzer-Profile anzeigen
HalliHallo,

Ich komme mal wieder mit einem Problem zu euch, und zwar:
Kann man über eine (selbstgeschriebene/von BB vorgegebene) Funktion Dateien zusammenfassen? also nicht archivieren, sondern z.b.: 5 Dateien (
1 x Bild1.png
1 x Bild2.png
1 x Stats.txt
1 x Position.txt
1 x other.txt) zu einer machen (save1.zsp), welche man nun mit BB öffnet und dann z.b. über:
Code: [AUSKLAPPEN]
Zeile1 = ReadLine("save1.zsp\Bild1.png")
genau das erste Bild aus der Datei öffnen kann? Ich brauche das, weil ich zum beispiel bei meinem Projekt "Z.O.M.B.I.E" verschiedenste Dateien speichern will, die dann aber nicht "ungeordnet" im "save"-Ordner landen sollen...

Ich weiß schon, dass man für sowas 7zip (oder wie das heißt) nehmen kann, möchte aber lieber eine Programm-Interne Funktion dafür schreiben...

Achja, bisher bin ich soweit gekommen:
Code: [AUSKLAPPEN]
SummerizeData("wichtige daten.txt", "datei\data1.data")
SummerizeData("wichtige daten2.txt", "datei\data1.data")

Print "Fertig"

WaitKey()
End

Function SummerizeData(file$, file2$)
   
    Local lesen = OpenFile(file$)
    Local SummerizedFile = WriteFile(file2$)
   
    Repeat
       
        WriteLine SummerizedFile, ReadLine(lesen)
       
    Until Eof(lesen)
   
    CloseFile SummerizedFile
    CloseFile lesen
   
End Function


Leider macht er wie ihm geheißen und löscht den Inhalt der datei die zuerst geschrieben wurde und setzt dafür den Inhalt der zweiten datei ein, bsp.:

wichtige daten.txt
Code: [AUSKLAPPEN]
1
2
3
4


wichtige daten2.txt
Code: [AUSKLAPPEN]
5
6
67
67
7


datei\data1.data
Code: [AUSKLAPPEN]
6
67
67
7


Was noch zu beheben wäre:

1. data1.data müsste das enthalten
Code: [AUSKLAPPEN]
1
2
3
4
6
67
67
7


2. Bilder und andere Dateien müssten auch noch zusammengefasst werden, ich habe da so an ReadByte gedacht, aber dann bekommt er bei jpg-dateien nen MAV...

3. Nach dem Zusammenfassen müssen die dateien natürlich auch wieder geöffnet und gelesen werden...

Bin echt ratlos Sad

Wäre für jede Hilfe Dankbar,
mfG,
SirMO
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti
  • Zuletzt bearbeitet von CO2 am Fr, Okt 29, 2010 13:54, insgesamt einmal bearbeitet

ToeB

BeitragMi, Sep 29, 2010 21:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Also von Blitz3D aus gehts net, mach es mal so dass du dir die Dateien einfach alle in eine Datei speicherst, und zwar so (dass soll in der Datei stehen)
Code: [AUSKLAPPEN]
Dateiname1 [Bytes von Datei1]
DateiName 2 [Bytes von Datei2]


Dann, wenn du es Brauchst, musst du die Dateien Temporär entpacken (also wieder in einzellne Dateien schreiben), Laden und wieder entfernen...

Sonst musst du mal nach einem guten Packen für Blitz suchen, ich glaub da gab es einen, aber der name fällt mir grad nicht ein .... Wo du sogar deine Dateien komprimieren konntest...

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!
 

CO2

ehemals "SirMO"

BeitragMi, Sep 29, 2010 21:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Dann, wenn du es Brauchst, musst du die Dateien Temporär entpacken (also wieder in einzellne Dateien schreiben), Laden und wieder entfernen...

Also quasi mit "WriteFile" und so, oder wie?

Thx
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

Silver_Knee

BeitragMi, Sep 29, 2010 21:43
Antworten mit Zitat
Benutzer-Profile anzeigen
schau dir nochmal den Unterschied von OpenFile ReadFile und WriteFile an. Im prinzip stimmt dein code nämlich. Was vllt noch in deinem "Dateiformat" fehlt ist, dass in der .data-Datei noch drin stehen muss wie die gepackten Dateien heißen und wo sie anfangen und aufhören, damit du weißt wo du beim lesen anfangen musst.

Die Funktionen von Blitz können leider nur von der Festplatte lesen. Du musst also deine Datei kurz entpacken und nach dem Lesen(ReadFile, LoadImage, etc) wieder löschen.
 

CO2

ehemals "SirMO"

BeitragMi, Sep 29, 2010 21:49
Antworten mit Zitat
Benutzer-Profile anzeigen
ok,

Aber wenn ich jetzt davon ausgehe, Bilder ebenfalls zu speichern - z.b. ein jpg - Bild - was enthält denn das? Also Bytes, Strings, Ints, Shorts, stc.?
Ich habe nämlich bei einem .jpg-Bild versucht Bytes zu lesen, da gab es nen MAV
.bmp sagt ja schon der Name (-> BITmap) - apropos kann man Bits mit BB lesen oder gehen nur Bytes als kleinste "Einheit"

Und nochmal mit dem Temporären entpacken - brauche ich dafür nicht ein prog wie 7zip? Und wenn nicht, kann mir jmd von euch einen klitzekleinen Denkanstoss geben? z.b. wie man die dateien temporär öffnet (mit readbyte, readstring, etc. ?)

thx
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

Xeres

Moderator

BeitragMi, Sep 29, 2010 22:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Computer speichern 0en und 1en. Ob so eine Folge als Integer, Float oder String interpretiert werden soll, muss im Dateiformat/vom Programmierer festgelegt werden. Wenn du nur mit Bytes arbeitest, solltest du keine Probleme bekommen.
Bits kannst du nicht direkt lesen, aber sicher könntest du die ansteuern.
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)
 

CO2

ehemals "SirMO"

BeitragMi, Sep 29, 2010 22:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe jetzt folgendes zusammengeschustert:

Code: [AUSKLAPPEN]
Apptitle "Skynet v.0.0.1" ;dem ganzen einen namen geben  :wink:  :D

SummerizeData("wichtige daten.txt", "datei\datei.data", 1) ;1. file (wichtige daten.txt)
SummerizeData("wichtige daten2.txt", "datei\datei.data", 2) ;2. file (wichtige daten2.txt)
   
Print "Fertig"

WaitKey()
End

Function SummerizeData(file$, dataname$, startmarke)
   
   Local JumpTo = 0 ;wird später gebraucht
   
   Local lesen = ReadFile(dataname$) ;Zusammengefasste Datei überprüfen
   
   If lesen > 0 Then ;wenn sie existiert, dann überprüfen wieviele bytes übersprungen werden müssen
      
      Repeat
         
         ReadByte lesen
         JumpTo = JumpTo + 1
         
      Until Eof(lesen)
      
   EndIf
   
   SeekFile lesen, JumpTo ;entsprechend springen
   
   Local SummerizedFile = OpenFile(file) ;2. datei öffnen
   
   WriteByte lesen, startmarke ;start-, sowie
   
   WriteByte lesen, JumpTo ;endmarke eintragen
   
   Repeat
      
      WriteByte lesen, ReadByte(SummerizedFile) ;daten reinschreiben
      
   Until Eof(SummerizedFile)
   
   CloseFile SummerizedFile
   
   CloseFile lesen ;beide dateien schließen
   
End Function


So, dabei bekomm ich erstmal nen MAV... Aber wenn ihr es testen wollt:

wichtige daten.txt (damit ihr es testen könnt):
Code: [AUSKLAPPEN]
1
2
3
4
4
5
65
45
4
32
2
23
3
43


wichtige daten2.txt
Code: [AUSKLAPPEN]
3
4
455
5



So, ich habe jetzt mal ein bisschen weitergearbeitet und zum lesen folgende Funktion entworfen:
Code: [AUSKLAPPEN]
Function ReadSummerizedData(dataname$, startmarke)
   
    Local lesen = OpenFile(dataname$)
   
    Local suchestartmarke$
   
    Local zeilen$
   
    While suchestartmarke <> startmarke
       
       
        suchestartmarke$ = ReadLine$(lesen)
       
       
    Wend
   
    zeilen$ = ReadLine$(lesen)
   
    Dim gelesen(zeilen)
   
    For x = 0 To zeilen
       
        gelesen(x) = ReadByte(lesen)
       
    Next
   
   
    CloseFile lesen
   
    Return gelesen
   
End Function


Jetzt meldet er "arraya not found in main programm!", wenn ich das array aber ins mainprog packe, weiß ich ja nicht wie viele stellen ich brauche... Bin absolut ratlos - was beide funktionen angeht.
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

Hubsi

BeitragDo, Sep 30, 2010 5:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Array not found kommt daher, das das Array im Main-Programm nicht definiert ist. Schreib dort einfach Dim gelesen(0) und schon hast Du ein Problem weniger. Weiter versuchst Du datei.data zu lesen in der Function, die aber noch gar nicht erstellt wurde. Darauf bleibt "lesen" natürlich 0, was bei SeekFile nicht überprüft wird -> Peng.
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

CO2

ehemals "SirMO"

BeitragDo, Sep 30, 2010 14:05
Antworten mit Zitat
Benutzer-Profile anzeigen
ahh, jetzt lichtet sich der nebel so langsam Very Happy

ich habe den Code überarbeitet:

Zusammenfassungsfunktion:
Code: [AUSKLAPPEN]
Function SummerizeData(file$, dataname$, startmarke$ = file$) ;<-- Wie geht das nochmal mit dem Wert der nicht zwingend eingetragen werden muss?
   
    Local JumpTo = 0 ;wird später gebraucht
   
    Local lesen = ReadFile(dataname$) ;Zusammengefasste Datei überprüfen
   
    If lesen > 0 Then ;wenn sie existiert, dann überprüfen wieviele bytes übersprungen werden müssen
       
        Repeat
           
            ReadByte lesen
            JumpTo = JumpTo + 1
           
        Until Eof(lesen)
       
    Else
       
        lesen = WriteFile(dataname$)
       
    EndIf
   
    SeekFile lesen, JumpTo ;entsprechend springen
   
    Local SummerizedFile = OpenFile(file) ;2. datei öffnen
   
    WriteByte lesen, startmarke ;start-, sowie
   
    WriteByte lesen, JumpTo ;endmarke eintragen
   
    Repeat
       
        WriteByte lesen, ReadByte(SummerizedFile) ;daten reinschreiben
       
    Until Eof(SummerizedFile)
   
    CloseFile SummerizedFile
   
    CloseFile lesen ;beide dateien schließen
   
End Function


Les-Funktion:
Code: [AUSKLAPPEN]
Function ReadSummerizedData(dataname$, startmarke$)
   
    Local lesen = OpenFile(dataname$) ;Zusammengefasste Datei öffnen
   
    Local suchestartmarke$ ;später
   
    Local zeilen ;später
   
    If lesen > 0 Then ;Wenn die datei gefunden wurde
   
        While suchestartmarke$ <> startmarke$ ;Suche die angegebene Startmarke
       
       
            suchestartmarke$ = ReadLine$(lesen)
       
       
        Wend
       
    Else ;wenn die datei nicht gefunden wurde
       
        RuntimeError "File not found" ;Error ausgeben
       
    EndIf
   
    zeilen = Int(ReadLine$(lesen)) ;Anzahl der bytes lesen (JumpTo aus der Summerize-Funktion)
   
    ;gelesen(zeilen) ;Array erhöhen
   
    For x = 0 To zeilen
       
        gelesen(x) = ReadByte(lesen) ;Daten lesen bis das die angegebene anzahl an bytes erreicht wurde
       
    Next
   
   
    CloseFile lesen ;File wieder Schließen
   
End Function


Code der beide Funktionen einschließt:

Code: [AUSKLAPPEN]
Dim gelesen(0)

Print "Zusammenfassen: "

SummerizeData("wichtige daten.txt", "datei.data")

DebugLog "File 1 ok!"

Print "Datei 1 Zusammengefasst"

SummerizeData("wichtige daten2.txt", "datei.data")

DebugLog "File 2 ok!"

Print "Datei 2 Zusammengefasst"

SummerizeData("svz.jpeg", "datei.data")

DebugLog "File 3 ok!"

Print "Datei 3 Zusammengefasst"

SummerizeData("optionen.txt", "datei.data")

DebugLog "File 4 ok!"

Print "Datei 4 Zusammengefasst"

Print ""
Print "Wieder auseinander: "
Print ""
Print "Datei 1: " + ReadSummerizedData("datei.data", "wichtige daten.txt")
Print ""


WaitKey()
End


Und wie geht das, wenn der Wert einer Varable nicht unbedingt eingetragen werden muss? Also z.b.: bei der "Graphics"-Funktion, da müssen "[depth]" und "[mode]" nicht eingetragen werden?

Und jetzt wieder das alte problem mit dem überschreiben...


thx schonmal im vorraus ;D
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti
  • Zuletzt bearbeitet von CO2 am Do, Sep 30, 2010 14:24, insgesamt einmal bearbeitet
 

Matthias

BeitragDo, Sep 30, 2010 14:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Hay.

Du brauchst nicht jedes byte extra auslesen. Benutze dazu ReadBytes und Banken.

Ich habe mal im Codearchiv ein Beispiel gemacht wie sowas functionieren könnte.
Vieleicht kannst du es gebraucen. Very Happy

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

CO2

ehemals "SirMO"

BeitragDo, Sep 30, 2010 14:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Thx, werd mir den Code mal anschauen ;D
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

M0rgenstern

BeitragDo, Sep 30, 2010 14:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, ich erkläre mal, wie ich dich verstanden habe:
Du willst deinem Programm nicht per Code sagen müssen welche Bilder es laden soll, sondern das ganze automatisieren?
Wenn dem so ist, dann hätte ich hier was für dich, ohne jetzt Werbung machen zu wollen.
Ist zwar in BMax geschrieben aber ich denke, dass du keine Probleme haben wirst das in B3D umzuschreiben.
Das einzige was du machen musst, wenn du das implementiert hast, ist künftig entsprechende Dateien vorher anständig zu benennen und zwei Funktionen aufzurufen.

Lg, M0rgenstern
 

CO2

ehemals "SirMO"

BeitragDo, Sep 30, 2010 15:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Doch, doch, ich möchte meinem Programm schon sagen, welches Bild es laden soll, es soll nur mehrere unterschiedliche Dateien zu einer Zusammengefassten Datei speichern - Das mit dem Bild sollte eig. nur Darstellen, dass es halt ganz unterschiedliche Dateien sein können.
Die Funktion wird natürlich noch dahingehend verändert, dass es anhand der Endung der Datei die zu der Zusammengefassten Datei hinzugefügt werden soll, erkennt, wie sie zu speichern und zu öffnen ist (WriteByte, WriteLine, etc.)
Ich bin momentan noch sehr am rumwerkeln was die Funktion angeht, zumal ich nicht weiß, wie man ein ganzes array returnt...

So, die Speicher-Funktion wurde jetzt so überarbeitet,dass sie schonmal fehlerfrei läuft (getestet bei 2 .txt-dateien):
Code: [AUSKLAPPEN]
Function SummerizeData(file$, dataname$, startmarke$)
   
    Local JumpTo = 0 ;wird später gebraucht
   
    Local lesen = OpenFile(dataname$) ;Zusammengefasste Datei überprüfen
   
    If lesen > 0 Then
   
        Repeat
           
            ReadByte lesen
            JumpTo = JumpTo + 1
           
        Until Eof(lesen)
       
    Else
       
        lesen = WriteFile(dataname$)
       
    EndIf
   
    Local SummerizedFile = ReadFile(file) ;2. datei öffnen
   
    SeekFile lesen, JumpTo ;entsprechend springen
   
    WriteByte lesen, startmarke ;start-, sowie
   
    WriteByte lesen, JumpTo ;endmarke eintragen
   
    Repeat
       
        WriteByte lesen, ReadByte(SummerizedFile) ;daten reinschreiben
       
    Until Eof(SummerizedFile)
   
    CloseFile SummerizedFile
   
    CloseFile lesen ;beide dateien schließen
   
End Function
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti
  • Zuletzt bearbeitet von CO2 am Do, Sep 30, 2010 15:27, insgesamt einmal bearbeitet

Thunder

BeitragDo, Sep 30, 2010 15:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Möglichkeit, die du genommen hast ist nicht optimal, weil du Binärdaten archivierst (Bilddateien, Musikdateien etc. sind in einem Binärformat gespeichert, d.h. sie können alle ASCII-Werte von 0 bis 255 enthalten).
Es ist möglich, wenn auch sehr unwahrscheinlich, dass durch gewisse Umstände in der PNG-Datei der String "irgendeinandererdateiname.endung"+Chr(13)+Chr(10) entsteht.
Wenn das passiert bekommst du die ganze Zeit Fehler und weißt nicht woher die kommen.
Eine Möglichkeit um das Problem zu lösen ist ein Header am Anfang der Datei, wie bei den FAT-Dateisystemen. In dem würdest du dann die Dateinamen mit den zugehörigen Positionen in der zusammengefassten Datei speichern.
Dazu:


mfg Thunder
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit
 

CO2

ehemals "SirMO"

BeitragDo, Sep 30, 2010 15:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank, Thunder, aber das wird sich erstmal nicht ändern, da ich erst beide Funktionen zum laufen kriegen muss...

Schreibfunktion (Soweit Funktionstüchtig - kann auch Bilder in einer Datei zusammenfassen):
Code: [AUSKLAPPEN]
Function SummerizeData(file$, dataname$, startmarke$)
   
    Local JumpTo = 0 ;wird später gebraucht
   
    Local lesen = OpenFile(dataname$) ;Zusammengefasste Datei überprüfen
   
    Local bytes = 0
   
    If lesen > 0 Then
   
        Repeat
           
            ReadByte lesen
            JumpTo = JumpTo + 1
           
        Until Eof(lesen)
       
    Else
       
        lesen = WriteFile(dataname$)
       
    EndIf
   
    Local SummerizedFile = ReadFile(file) ;2. datei öffnen
   
    Repeat
       
        ReadByte SummerizedFile
        bytes = bytes + 1
       
    Until Eof(SummerizedFile)
       
   
    SeekFile lesen, JumpTo ;entsprechend springen
   
    WriteLine lesen, "" ;Leerzeichen
   
    WriteLine lesen, startmarke ;start-, sowie
   
    WriteLine lesen, bytes ;endmarke eintragen
   
    WriteLine lesen, Right$(file$, 4) ;Endung der Datei eintragen
   
    Repeat
       
        WriteByte lesen, ReadByte(SummerizedFile) ;daten reinschreiben
       
    Until Eof(SummerizedFile)
   
    CloseFile SummerizedFile
   
    CloseFile lesen ;beide dateien schließen
   
End Function


Lese-Funktion (Funktioniert bei .txt dateien, gibt aber leider nur eine Zeile aus, muss nochmal wegen return schauen):
Code: [AUSKLAPPEN]
Function ReadSummerizedData(dataname$, startmarke$)
   
    Local lesen = OpenFile(dataname$) ;Zusammengefasste Datei öffnen
   
    Local suchestartmarke$ ;später
   
    Local Sprung = 0
   
    Local bytes ;später
   
    Local endung$ ;später
   
    If lesen > 0 Then ;Wenn die datei gefunden wurde
   
        While suchestartmarke$ <> startmarke$ ;Suche die angegebene Startmarke
       
       
            suchestartmarke$ = ReadLine$(lesen)
            Sprung = Sprung + 1
       
       
        Wend
       
    Else ;wenn die datei nicht gefunden wurde
       
        RuntimeError "File not found" ;Error ausgeben
       
    EndIf
   
    SeekFile(lesen, Sprung)
   
    bytes = ReadLine$(lesen) ;Anzahl der bytes lesen (Variable "bytes" aus der Summerize-Funktion)
   
    endung = ReadLine$(lesen) ;Endung auslesen
   
   
    For x = 0 To bytes
       
        Print ReadLine(lesen)
       
    Next
   
    CloseFile lesen ;File wieder Schließen
   
End Function


apropos kann man arrays returnen? Wenn ja, wie?
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti
 

CO2

ehemals "SirMO"

BeitragSo, Okt 03, 2010 20:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Sorry wegen Doppelpost, aber sonst wird ja nicht angezeigt, dass sich hier was geändert hat...

Ich habe die Write-Funktion jetzt überarbeitet:

Code: [AUSKLAPPEN]
Function SummerizeData(file$, dataname$, startmarke$)
   
    Local JumpTo = 0 ;wird später gebraucht
   
    Local lesen = OpenFile(dataname$) ;Zusammengefasste Datei überprüfen
   
    Local bytes
   
    Local gespeichertebytes = 0
   
    If lesen > 0 Then
   
        Repeat
           
            ReadByte lesen
            JumpTo = JumpTo + 1
           
        Until Eof(lesen)
       
    Else
       
        lesen = WriteFile(dataname$)
       
    EndIf
   
    CloseFile lesen
   
    Local schreiben = OpenFile(dataname$)
   
    SeekFile(schreiben, JumpTo) ;entsprechend springen
   
    Local SummerizedFile = ReadFile(file) ;2. datei öffnen
   
    WriteLine schreiben, startmarke ;start-, sowie
   
    WriteLine schreiben, AnzahlBytes(file) ;endmarke eintragen
   
    WriteLine schreiben, Right$(file$, 4) ;Endung der Datei eintragen
   
   
    While gespeichertebytes < bytes
       
        WriteByte lesen, ReadByte(SummerizedFile) ;daten reinschreiben
        gespeichertebytes = gespeichertebytes + 1
       
    Wend
   
   
    CloseFile SummerizedFile
   
    CloseFile schreiben ;beide dateien schließen
   
End Function


...leider schreibt er jetzt gar nichts mehr in die Datei (außer "startmarke", "Größe in Bytes" und "Endung") könnt ihr mir sagen woran das liegt? Habe ich keine Ahnung, schon alles mögliche ausprobiert, leider tut sich da nichts,

thx schonmal im vorraus,
mfG
SirMO
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

das wurgel

BeitragSo, Okt 03, 2010 21:47
Antworten mit Zitat
Benutzer-Profile anzeigen
nabend

Schau dir mal FileSize an, das gibt die Größe einer Datei in Bytes an.

Zitat:
Code: [AUSKLAPPEN]
While gespeichertebytes < bytes

bytes ist nicht initialisiert. Deswegen kommt nichts rein.

Zitat:
Code: [AUSKLAPPEN]
SeekFile(lesen, Sprung)

in Sprung zählst du die Zeilen, mit SeekFile setzt du die Byte-Position.

Außerdem ist es unsinnig, daten wie Bilder mit ReadLine durchzugehen. Das kann zu sehr seltsamen Problemen führen. Du brauchst es ja auch garnicht, weil die Deteigröße der darauffolgenden Datei ja vorher in der Datei steht, du kannst die Daten also überspringen falls nötig und beim nächsten Header wieder prüfen, ob es die richtige Datei ist usw.. Das würde auch das Problem mit der Sprung-Variable lösen.
1 ist ungefähr 3
 

CO2

ehemals "SirMO"

BeitragMi, Okt 13, 2010 19:03
Antworten mit Zitat
Benutzer-Profile anzeigen
ok, habs jetzt überarbeitet, tut sich aber leider immernoch nichts...

Code: [AUSKLAPPEN]
Function SummerizeData(file$, endung$, dataname$, startmarke$)
   
    Local JumpTo = 0 ;wird später gebraucht
   
    Local lesen = OpenFile(dataname$) ;Zusammengefasste Datei überprüfen
   
    Local SummerizedFile = ReadFile(file$) ;2. datei öffnen
   
    Local gespeichertebytes = 0
   
    Local datanamegroesse = FileSize(dataname$)
   
    Local summerizedfilegroesse = FileSize(SummerizedFile)
   
    If lesen > 0 Then
       
        Repeat
           
            ReadByte lesen
            JumpTo = JumpTo + 1
           
        Until Eof(lesen)
       
    Else
       
        lesen = WriteFile(dataname$)
       
    EndIf
   
    CloseFile lesen
   
    Local schreiben = OpenFile(dataname$)
   
    SeekFile(schreiben, datanamegroesse) ;entsprechend springen
   
    WriteLine schreiben, startmarke ;start-, sowie
   
    WriteLine schreiben, summerizedfilegroesse ;endmarke eintragen
   
    WriteLine schreiben, endung ;Endung der Datei eintragen
   
    While gespeichertebytes < summerizedfilegroesse
       
        WriteByte(schreiben, ReadByte(SummerizedFile)) ;daten reinschreiben
        gespeichertebytes = gespeichertebytes + 1
       
    Wend
   
   
    CloseFile SummerizedFile
   
    CloseFile schreiben ;beide dateien schließen
   
End Function



Function ReadSummerizedData(dataname$, startmarke$)
   
    CreateDir "UnSummerizedData"
   
    Local lesen = ReadFile(dataname$)
   
    Local suchestartmarke$ = ""
   
    Repeat
       
        suchestartmarke = ReadLine(lesen)
       
    Until suchestartmarke$ = startmarke$
   
    Local bytes = ReadLine$(lesen)
   
    Local endung$ = ReadLine$(lesen)
   
    Local schreiben = WriteFile("UnSummerizedData\" + dataname + "_" + startmarke + "." + endung + "")
   
    For x = 0 To bytes
       
        WriteByte schreiben, ReadByte(lesen)
       
    Next
   
    CloseFile schreiben
   
    CloseFile lesen
   
End Function



Function DeleteUnSummerizedData()
   
    DeleteDir "UnSummerizedData"
   
End Function


Ich weiß echt nicht mehr, wo der fehler liegen könnte...
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

faeX

BeitragDo, Okt 14, 2010 13:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe mir kurz die Mühe gemacht, ein funktionierendes Beispiel zu programmieren. Bitte erst Summarize_Prepare ausführen, so wird die zusammgefasste Datei erstellt. In Summarize_Extract wird gezeigt, wie man diese wieder ausliest. Smile

SpionAtom

BeitragDo, Okt 14, 2010 15:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Dos/Commandbox "Copy"-Befehl kann Dateienzusammenfassen.

Weiß nicht mehr genau, aber irgendwie so ging das:

Code: [AUSKLAPPEN]

copy 1.txt + 2.txt + [....] ziel.txt
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group