Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Datenstruktur 2D tabelle (gro (https://www.delphipraxis.net/195708-datenstruktur-2d-tabelle-gro.html)

myicq 19. Mär 2018 16:31

Datenstruktur 2D tabelle (gro
 
Hi,

ich möchte gern, under Delphi 6, eine relativ große Tabelle einlesen können, und im Speicher bearbeiten.
Die Daten kommen meistens aus CSV, kann groß oder klein sein.

Max größe währe so um die 1 mio Zeilen mal 70 Felder, aber könnte auch 3 Zeilen sein x 2 Felder.

Ich muss die Felder per index abrufen können, zB "dataarray[Zeile, Spalte]"

Meine Idee währe erstmals eine Dynamischer Array, also


dataarray: array of array of widestring;

Leider komme ich hier oft in Problem mit größenänderung.

Ich habe auch versucht mit Synopse Bigtable (http://blog.synopse.info/tag/BigTable), kann aber kein einfaches Beispiel finden.
Verwendet jemand das überhaupt ?

Was machen andere die große Tabellen für instant Zugriff haben möchte ?

Code folgt demnächst.

himitsu 19. Mär 2018 17:43

AW: Datenstruktur 2D tabelle (gro
 
Delphi-Quellcode:
array{1..1000000} of array{1..70} of IrgendwasAlsPointer;

4*2+4*1.000.000 + (4*2+4*70)*1.000.000 + (4*2+stringleng)*1.000.000*70
jeweils Verwaltungsdaten + Arrayinhalt
und ich nehm jetzt einfach mal durchschnittlich 20 Zeichen pro Wert
4.000.008 + 288.000.000 + 1.960.000.000
dazu kommt noch bissl Speicherausrichtung und Speicherfragmentierung

Und schon sind deine 2 GB Arbeitsspeicher mehr als überfüllt.
Fazit: Vergiss es das alles gleichzeitig im Arbeitsspeicher haben zu wollen.

Sequentiell arbeiten
oder auslagern (z.B. Datenbank)

Blup 21. Mär 2018 13:46

AW: Datenstruktur 2D tabelle (gro
 
Statt Array eine TStringList. Diese enthält als Strings die einzelnen Zeilen.
Beim Einlesen vorher SetCapacity verwenden, damit ausreichend Speicher am Stück reserviert wird.

Erst beim Zugriff auf einen Spaltenwert die Zeile zerlegen, bzw. beim Schreiben neu zusammensetzen.

p80286 21. Mär 2018 21:08

AW: Datenstruktur 2D tabelle (gro
 
Zitat:

Zitat von himitsu (Beitrag 1396665)
..oder auslagern (z.B. Datenbank)

:thumb:

Oder falls es auf keinen Fall eine Datenbank sein soll, dann solltest Du einen File of Record oder noch älter eine Datei mit fixen Satzlängen. Da ist der Platzbedarf u.U. exorbitant. Eine weiter Möglichkeit wäre ein Format ähnlich dBase zuerst Indizes und dann die Daten.

Aber ein richtige Datenbank würde ich auf jeden Fall vorziehen.

Gruß
K-H

KodeZwerg 21. Mär 2018 21:27

AW: Datenstruktur 2D tabelle (gro
 
Zitat:

Zitat von myicq (Beitrag 1396637)
Code folgt demnächst.

Ich bin gespannt wie ein Flitzebogen!


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:43 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz