Write-, ReadStructure (3. Update)
Tachchen Nic,
ich habe auch mal n Version geschrieben, die bei Arrays keine Rekursion benutzt (sonder LL-Elemente).
Daruch werden ganze Arrays die nur aus b,c,l,f,q,d bestehen auch komplett als Data geschrieben/gelesen.
Vllt ist diese Variante ja schneller, man kann es leider nicht richtig Testen, da die Festplatte zu unterschiedliche Schreibgeschwindigkeit hat.
Außerdem schreibe ich die Strings anders in die Datei, ....
Gucks dir einfach mal an:
btw. n Frage, ist SizeOf() eine Procedure oder ein Macro, denn wenn das programm immer wieder neu "guckt" wie groß eine LONG ist wäre eine einfache 4 schneller ^^
ich habe auch mal n Version geschrieben, die bei Arrays keine Rekursion benutzt (sonder LL-Elemente).
Daruch werden ganze Arrays die nur aus b,c,l,f,q,d bestehen auch komplett als Data geschrieben/gelesen.
Vllt ist diese Variante ja schneller, man kann es leider nicht richtig Testen, da die Festplatte zu unterschiedliche Schreibgeschwindigkeit hat.
Außerdem schreibe ich die Strings anders in die Datei, ....
Gucks dir einfach mal an:
Code: Alles auswählen
Structure AllTypes
StructureUnion
b.b : c.c : w.w : l.l : f.f : d.d : q.q : s.s
EndStructureUnion
EndStructure
Structure StructureArrayPBI
Feld.l
Index.l
EndStructure
Global NewList StructureArrayPBI.StructureArrayPBI()
Procedure WriteStructure(File, *Value.AllTypes, *Struktur.Character)
While *Struktur\c
Select *Struktur\c
Case '[' :
AddElement(StructureArrayPBI())
Felder = Val(PeekS(*Struktur+1))
StructureArrayPBI()\Feld = Felder
StructureArrayPBI()\Index = *Struktur+Len(Str(Felder))
*Struktur = StructureArrayPBI()\Index
Case ']'
StructureArrayPBI()\Feld - 1
If Not StructureArrayPBI()\Feld
DeleteElement(StructureArrayPBI())
Else
*Struktur = StructureArrayPBI()\Index
EndIf
Case 'b' : DataLength + 1
Case 'c' : DataLength + SizeOf(Character)
Case 'w' : DataLength + 2
Case 'l' : DataLength + 4
Case 'f' : DataLength + 4
Case 'q' : DataLength + 8
Case 'd' : DataLength + 8
Case 's' :
If DataLength
WriteData(File, *Value, DataLength)
*Value + DataLength
DataLength = 0
EndIf
WriteString(File,*Value\s) : WriteByte(File,0)
*Value + 4
EndSelect
*Struktur + 1
Wend
If DataLength
WriteData(File, *Value, DataLength)
EndIf
EndProcedure
Procedure ReadStructure(File, *Value.AllTypes, *Struktur.Character)
While *Struktur\c
Select *Struktur\c
Case '[' :
AddElement(StructureArrayPBI())
Felder = Val(PeekS(*Struktur+1))
StructureArrayPBI()\Feld = Felder
StructureArrayPBI()\Index = *Struktur+Len(Str(Felder))
*Struktur = StructureArrayPBI()\Index
Case ']'
StructureArrayPBI()\Feld - 1
If Not StructureArrayPBI()\Feld
DeleteElement(StructureArrayPBI())
Else
*Struktur = StructureArrayPBI()\Index
EndIf
Case 'b' : DataLength + 1
Case 'c' : DataLength + SizeOf(Character)
Case 'w' : DataLength + 2
Case 'l' : DataLength + 4
Case 'f' : DataLength + 4
Case 'q' : DataLength + 8
Case 'd' : DataLength + 8
Case 's' :
If DataLength
ReadData(File, *Value, DataLength)
*Value + DataLength
DataLength = 0
EndIf
*Value\s = ReadString(File)
*Value + 4
EndSelect
*Struktur + 1
Wend
If DataLength
ReadData(File, *Value, DataLength)
EndIf
EndProcedure
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
- NicTheQuick
- Ein Admin
- Beiträge: 8809
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Write-, Read-, CopyStructure (2. Update)
Das muss ein Makro sein und vom Präprozessor abgearbeitet werden, denn zur Laufzeit gibt es keine Typen mehr.
Hm... Ich schätze nach 4 Jahren ist dir das sowieso schon klar.
Hm... Ich schätze nach 4 Jahren ist dir das sowieso schon klar.

Re: Write-, Read-, CopyStructure (2. Update)
Hi Nic,
super reaktionszeit auf eine Frage...
Sind ja nur knapp 10 Monate vergangen.
super reaktionszeit auf eine Frage...
Sind ja nur knapp 10 Monate vergangen.

Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
Re: Write-, Read-, CopyStructure (2. Update)
mit der neuen Version müßte man das sowieso vielleicht umschreiben, da man jetzt mit = Kopien von Structs erzeugen kann.
... oder ganz aufgeben, wenn es nicht mehr kann.
... oder ganz aufgeben, wenn es nicht mehr kann.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Re: Write-, Read-, CopyStructure (2. Update)
er hatte mir ja damals schon n PN geschicktsuper reaktionszeit auf eine Frage...
Sind ja nur knapp 10 Monate vergangen.

PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
- NicTheQuick
- Ein Admin
- Beiträge: 8809
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Write-, Read-, CopyStructure (2. Update)
Das wusste ich auch nicht mehr, siehste mal...STARGÅTE hat geschrieben:er hatte mir ja damals schon n PN geschickt
- NicTheQuick
- Ein Admin
- Beiträge: 8809
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Write-, Read-, CopyStructure (2. Update)
Ich habe meine Funktionen erweitert auf die neuste und noch nicht existente PB-Version.
Siehe "Edit 4" im ersten Post.
Siehe "Edit 4" im ersten Post.
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Write-, Read-, CopyStructure (2. Update)
Die wird dann aber auch nicht funktionieren, weil s.s wird in structureunion verboten bleiben!NicTheQuick hat geschrieben:Ich habe meine Funktionen erweitert auf die neuste und noch nicht existente PB-Version.
Siehe "Edit 4" im ersten Post.
*s wird funktionieren!
Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

- NicTheQuick
- Ein Admin
- Beiträge: 8809
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Write-, Read-, CopyStructure (2. Update)
Jetzt funktioniert es. Habe ein bisschen getrickst. 
