Write-, ReadStructure (3. Update)

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Beitrag von Scarabol »

Hi Leute,

kann man für die Standard IDE Plugins oder sowas schreiben, oder mit einem Macro tricksen?

Gruß
Scarabol
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

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:

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
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 ^^
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
Benutzeravatar
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)

Beitrag von NicTheQuick »

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. :mrgreen:
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Write-, Read-, CopyStructure (2. Update)

Beitrag von mk-soft »

Hi Nic,

super reaktionszeit auf eine Frage...
Sind ja nur knapp 10 Monate vergangen. :roll:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: Write-, Read-, CopyStructure (2. Update)

Beitrag von Kaeru Gaman »

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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Write-, Read-, CopyStructure (2. Update)

Beitrag von STARGÅTE »

super reaktionszeit auf eine Frage...
Sind ja nur knapp 10 Monate vergangen.
er hatte mir ja damals schon n PN geschickt :wink:
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
Benutzeravatar
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)

Beitrag von NicTheQuick »

STARGÅTE hat geschrieben:er hatte mir ja damals schon n PN geschickt :wink:
Das wusste ich auch nicht mehr, siehste mal...
Benutzeravatar
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)

Beitrag von NicTheQuick »

Ich habe meine Funktionen erweitert auf die neuste und noch nicht existente PB-Version.
Siehe "Edit 4" im ersten Post.
Benutzeravatar
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)

Beitrag von ts-soft »

NicTheQuick hat geschrieben:Ich habe meine Funktionen erweitert auf die neuste und noch nicht existente PB-Version.
Siehe "Edit 4" im ersten Post.
Die wird dann aber auch nicht funktionieren, weil s.s wird in structureunion verboten bleiben!
*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.
Bild
Benutzeravatar
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)

Beitrag von NicTheQuick »

Jetzt funktioniert es. Habe ein bisschen getrickst. :wink:
Antworten