Menge erforderlicher Daten macht Programmierung unmöglich
-
- Beiträge: 50
- Registriert: 29.03.2013 12:25
- Wohnort: Eisenach
Menge erforderlicher Daten macht Programmierung unmöglich
Hallo !
Ich benötige für ein Programm bestimmte berechnete Werte aller 16 Mio RGB-Farben - für jede Farbe 6 Werte.
Ich habe diese Werte mit einem PB-Programm berechnet und in eine Datei "daten.pb" als Data-Zeilen
geschrieben. Diese Datei ist 1Gb groß und es dauert einen gefühlten Tag, bis sie geladen ist. Ich wollte
die "daten.pb" dann durch den eigentlichen Programmcode vervollständigen. Ich schätze mit der
Datamethode geht es (praktisch) nicht. Welche anderen Wege gibt es, diese gewaltige Datenmenge in
ein Programm einzubinden, daß dann aber auch noch läuft.
Heinz
Ich benötige für ein Programm bestimmte berechnete Werte aller 16 Mio RGB-Farben - für jede Farbe 6 Werte.
Ich habe diese Werte mit einem PB-Programm berechnet und in eine Datei "daten.pb" als Data-Zeilen
geschrieben. Diese Datei ist 1Gb groß und es dauert einen gefühlten Tag, bis sie geladen ist. Ich wollte
die "daten.pb" dann durch den eigentlichen Programmcode vervollständigen. Ich schätze mit der
Datamethode geht es (praktisch) nicht. Welche anderen Wege gibt es, diese gewaltige Datenmenge in
ein Programm einzubinden, daß dann aber auch noch läuft.
Heinz
Re: Menge erforderlicher Daten macht Programmierung unmöglic
Wofür brauchst du die vorberechneten RGB-Werte? Kann man diese nicht während der Laufzeit berechnen?
Wie sehen die Werte aus? Was ist das Ziel dieser Daten? Was möchtest du genau machen?
Bezüglich des Ladens: Wenn du eine große Datei zeilenweise (ReadStringN()) einliest, dann ist das kein Wunder, dass es ewig dauert. Viel schneller ist es, wenn du die Datei mit ReadData() lädst.
Wie sehen die Werte aus? Was ist das Ziel dieser Daten? Was möchtest du genau machen?
Bezüglich des Ladens: Wenn du eine große Datei zeilenweise (ReadStringN()) einliest, dann ist das kein Wunder, dass es ewig dauert. Viel schneller ist es, wenn du die Datei mit ReadData() lädst.
Re: Menge erforderlicher Daten macht Programmierung unmöglic
Unabhängig davon, was du vorhast hier ein Lösungsweg:
Speichere deine 6 Werte zu jeder Farbe in eine "normale" binäre Datei zB kannst du ja mit PureBasic und WriteLong() oder WriteWord() oder WriteFloat() (keine Ahnung was du brauchst) die Daten hintereinander weg in die Datei schreiben.
Da diese 6 Werte ja immer die gleiche Länge haben werden, kannst du dann aus deinem Programm heraus sehr schnell auf diese Gigabyte-Datei mittels FileSeek() auf die entsprechende Stelle springen, sozusagen streamen.
Speichere deine 6 Werte zu jeder Farbe in eine "normale" binäre Datei zB kannst du ja mit PureBasic und WriteLong() oder WriteWord() oder WriteFloat() (keine Ahnung was du brauchst) die Daten hintereinander weg in die Datei schreiben.
Da diese 6 Werte ja immer die gleiche Länge haben werden, kannst du dann aus deinem Programm heraus sehr schnell auf diese Gigabyte-Datei mittels FileSeek() auf die entsprechende Stelle springen, sozusagen streamen.
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
-
- Beiträge: 50
- Registriert: 29.03.2013 12:25
- Wohnort: Eisenach
Re: Menge erforderlicher Daten macht Programmierung unmöglic
Hallo,
Die 6 Werte pro die 16 Mio Farben werden zu Rechnungen im Lab-Farbraum benötigt. Natürlich könnte man diese
auch während der Laufzeit berechnen. Man benötigt aber auch dann einige Mio Variablen bzw. Arrays. Auch würde
das Programm eine Weile vor sich hinarbeiten (Laden der Daten) ehe es mit der eigenlichen Anwendung weitergeht. Das
Problem mit den Data-Zeilen ist, daß das Programm,das diese enthält, unendlich lang benötigt, bis der Text im
Editor (GUI) geladen ist und man Code eingeben kann. Ich weiss ja nicht, wie es wäre, wenn das Programm mit
den Datazeilen compiliert bzw. eine Exe wäre.
Data.f 230443,12.443432,-112.344432,0.3444324,-67.004556,-3.785545,-54.225467
230443 ist die Farbe RGB()
Ich brauche die Daten nicht nur für eine bestimmte Farbe, sondern müssen zum
Vergleich alle zur Verfügung stehen.
Die 6 Werte pro die 16 Mio Farben werden zu Rechnungen im Lab-Farbraum benötigt. Natürlich könnte man diese
auch während der Laufzeit berechnen. Man benötigt aber auch dann einige Mio Variablen bzw. Arrays. Auch würde
das Programm eine Weile vor sich hinarbeiten (Laden der Daten) ehe es mit der eigenlichen Anwendung weitergeht. Das
Problem mit den Data-Zeilen ist, daß das Programm,das diese enthält, unendlich lang benötigt, bis der Text im
Editor (GUI) geladen ist und man Code eingeben kann. Ich weiss ja nicht, wie es wäre, wenn das Programm mit
den Datazeilen compiliert bzw. eine Exe wäre.
Data.f 230443,12.443432,-112.344432,0.3444324,-67.004556,-3.785545,-54.225467
230443 ist die Farbe RGB()
Ich brauche die Daten nicht nur für eine bestimmte Farbe, sondern müssen zum
Vergleich alle zur Verfügung stehen.
Re: Menge erforderlicher Daten macht Programmierung unmöglic
Lade das als include in dein Programm. Wenn du diese als Data in die Editor gui mit lädtst, dann wartest du eeeewig bis du mal einen klick machen kannst, geschweige denn code schreiben. Und beim nächsten scrollen wartest du wieder.
Keine gute Idee
Keine gute Idee
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
- hjbremer
- Beiträge: 822
- Registriert: 27.02.2006 22:30
- Computerausstattung: von gestern
- Wohnort: Neumünster
Re: Menge erforderlicher Daten macht Programmierung unmöglic
Versuch es doch mal mit einem virtuellem Listicongadget
es gibt ein Beispiel von mir http://purebasic.fr/german/viewtopic.ph ... ew#p300345
Es funktioniert aber nur mit einer alten Pb Version korrekt und nur unter Windows. Es zeigt aber wie man es benutzt.
Der Zugriff auf die Daten für den Vergleich etc, funktioniert aber nur mit Api Befehlen siehe 2.Beispiel. Ansonsten steht alles wichtige im Code
Den Code umzuschreiben auf neuere Versionen dafür habe ich aber keine Zeit und Lust
__________________________________________________
Link angepasst
09.04.2016
RSBasic
es gibt ein Beispiel von mir http://purebasic.fr/german/viewtopic.ph ... ew#p300345
Es funktioniert aber nur mit einer alten Pb Version korrekt und nur unter Windows. Es zeigt aber wie man es benutzt.
Der Zugriff auf die Daten für den Vergleich etc, funktioniert aber nur mit Api Befehlen siehe 2.Beispiel. Ansonsten steht alles wichtige im Code
Den Code umzuschreiben auf neuere Versionen dafür habe ich aber keine Zeit und Lust
__________________________________________________
Link angepasst
09.04.2016
RSBasic
Purebasic 5.70 x86 5.72 X 64 - Windows 10
Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
-
- Beiträge: 58
- Registriert: 04.10.2008 12:10
Re: Menge erforderlicher Daten macht Programmierung unmöglic
Datenbank?Heinz Mendax hat geschrieben:Ich brauche die Daten nicht nur für eine bestimmte Farbe, sondern müssen zum
Vergleich alle zur Verfügung stehen.
Re: Menge erforderlicher Daten macht Programmierung unmöglic
Naja, es sollte ja wirklich kein Problem sein die Daten in eine Datei zu schreiben und wieder auszulesen.
Eine Datenbank macht auch nichts anderes.
Und sofern Du genug RAM hast, einmal alles da rein dann flutscht das.
Eine Datenbank macht auch nichts anderes.

Und sofern Du genug RAM hast, einmal alles da rein dann flutscht das.
Re: Menge erforderlicher Daten macht Programmierung unmöglic
Bei diesem Code gibt es ein Fehler vom Assembler:Hier ist wohl die Grenze einer DataSection erreicht.
Durch einen anderen Weg ist es jedoch möglich, eine solch riesige Datei an die Programmdatei anzuhängen und vom Programm später auslesen zu lassen:
Das eigentliche Programm, das die inkludierte Datei enthalten und auslesen soll:
Hilfsprogramm, um an Programmdateien Dateien anzuhängen:
Um das Beispiel auszuführen, muss der Code des eigentlichen Programms zu einer EXE kompiliert werden. Anschließend wird das Hilfsprogramm gestartet, mit diesem die gerade kompilierte EXE geöffnet und die zu inkludierende Datei ausgewählt wird. Nach einem kurzen Moment erscheint die Nachricht, dass das Programm fertig ist. Starte nun das eigentliche Programme, das nun die inkludierte Datei enthält.
Bei dieser Vorgehensweise wird beim Programmstart nicht die komplette EXE-Datei mit der Gigabyte großen inkludierten Datei in den Arbeitsspeicher geladen. Geprüft habe ich es unter Windows XP und Linux.
Code: Alles auswählen
DataSection
IncludeBinary "BigFile.dat" ; 1,3 GB Datei
EndDataSection
Durch einen anderen Weg ist es jedoch möglich, eine solch riesige Datei an die Programmdatei anzuhängen und vom Programm später auslesen zu lassen:
Das eigentliche Programm, das die inkludierte Datei enthalten und auslesen soll:
Code: Alles auswählen
Define.s FileData
Define *IncludedDataSize, *StartPosOfIncludedData
If ReadFile(0, ProgramFilename())
; Datei-Zeiger an das Datei-Ende vor dem Long-Wert mit der Daten-Größe setzen
FileSeek(0, Lof(0) - SizeOf(LONG))
*IncludedDataSize = ReadLong(0)
; Zum Anfang des Long-Werts zurück
FileSeek(0, -SizeOf(LONG), #PB_Relative)
; und weiter zum Anfang der inkludierten Daten zurück
FileSeek(0, -*IncludedDataSize, #PB_Relative)
*StartPosOfIncludedData = Loc(0)
; 3 Ascii-Zeichen von den inkludierten Daten lesen
FileData = ReadString(0, #PB_Ascii, 3)
; Nochmal an den Anfang der inkludierten Daten
FileSeek(0, *StartPosOfIncludedData)
; 2 Bytes von den inkludierten Daten lesen und als Hex-Werte ausgeben
FileData + #CRLF$ + Hex(ReadByte(0), #PB_Byte) + Hex(ReadByte(0), #PB_Byte)
CloseFile(0)
EndIf
MessageRequester("Info", FileData)
Code: Alles auswählen
Define.s EXE_File.s = OpenFileRequester("EXE-Datei öffnen", "", "", 0)
If Not (FileSize(EXE_File) > 0 And OpenFile(0, EXE_File, #PB_File_Append))
Debug "EXE-Datei ist leer oder Fehler!"
End
EndIf
Define.s FileToAdd.s = OpenFileRequester("Datei hinzufügen", "", "", 0)
If Not (FileSize(FileToAdd) > 0 And ReadFile(1, FileToAdd))
Debug "Hinzufügende Datei ist leer oder Fehler!"
Goto CleanUp
EndIf
; 10 MegaByte großer Buffer allozieren
Define *Buffer = AllocateMemory(1024*1024*10, #PB_Memory_NoClear)
If *Buffer = 0
Debug "Speicher konnte nicht reserviert werden!"
Goto CleanUp
EndIf
; Zu inkludierende Datei schrittweise an die EXE-Datei anhängen
Define.i DataSize
Repeat
DataSize = ReadData(1, *Buffer, MemorySize(*Buffer))
If DataSize > 0
WriteData(0, *Buffer, DataSize)
EndIf
Until DataSize = 0
; Länge der Daten als Long-Wert schreiben
WriteLong(0, Lof(1))
MessageRequester("Fertig", "Die Datei wurde inkludiert!")
CleanUp:
CloseFile(#PB_All)
If *Buffer : FreeMemory(*Buffer) : EndIf
Bei dieser Vorgehensweise wird beim Programmstart nicht die komplette EXE-Datei mit der Gigabyte großen inkludierten Datei in den Arbeitsspeicher geladen. Geprüft habe ich es unter Windows XP und Linux.

Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
- NicTheQuick
- Ein Admin
- Beiträge: 8807
- 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: Menge erforderlicher Daten macht Programmierung unmöglic
Um Vergleiche irgendwelcher Werte zueinander anzustellen, ist eine Datenbank mit ordentlichen Indizes und Keys am simpelsten zu handhaben. Vielleicht reicht da schon SQLite für.
Aber eine Datasection für über 1 GB Daten zu missbrauchen, ist Unfug. Eine externe Datei an die EXE anzuhängen gewinnt auch keine Preise, aber ist besser als die Datasection-Version.
Wenn man jetzt wüsste, was du mit den Daten genau machen willst, könnten wir dir vorschlagen, was das beste Vorgehen wäre.
Aber eine Datasection für über 1 GB Daten zu missbrauchen, ist Unfug. Eine externe Datei an die EXE anzuhängen gewinnt auch keine Preise, aber ist besser als die Datasection-Version.
Wenn man jetzt wüsste, was du mit den Daten genau machen willst, könnten wir dir vorschlagen, was das beste Vorgehen wäre.