Arraymenge

Zugriff, Engines, Konvertierung. Von ADS über DBF bis zu SQL.

Moderator: Moderatoren

saul
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 284
Registriert: So, 26. Mär 2006 12:23

Arraymenge

Beitrag von saul »

Hallo,
kann es sein das, dass

Code: Alles auswählen

Data:=Array(300000)
Data:=Array(5000,5000)
funktioniert

Code: Alles auswählen

Data:=Array(20000,20000)
Eine Fehlermeldung bringt interne Datenstrukturen beschädigt?
Das kann doch nicht am Speicherplatz liegen, sonst würde das eindimensionale Array mit 300000 ja auch steiken.

mfg
Wolfgang
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Arraymenge

Beitrag von Jan »

Wende Dich mal an Alaska. Es gibt da eine DLL mit passender Doku, um Arrays in dieser Größe erstellen zu können. Das ist von Alaska aus Performancegründen gekappt worden bei 400.000 Elementen (glaube ich). Mit der DLL habe ich das auf 800.000 hochgeschraubt ohne irgendwelche Nebenwirkungen.

Abgesehen davon gibt es irgendeine Begrenzung, wenn man man ein Array erstellt. Ich habe Arrays erstellt, gleich inklusive der Daten, das knallt. Aber die einzelnen Sätze mit AAdd() anhängen, das geht.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16508
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Arraymenge

Beitrag von Martin Altmann »

saul hat geschrieben:Das kann doch nicht am Speicherplatz liegen, sonst würde das eindimensionale Array mit 300000 ja auch steiken.
Warum sollte es da auch streiken? Schon mal nachgerechnet? 300.000 ist wesentlich kleiner als das Produkt von 20.000*20.000 :!:

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
saul
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 284
Registriert: So, 26. Mär 2006 12:23

Re: Arraymenge

Beitrag von saul »

Ich glaube ich habe den Fehler. Ich wollte ein zweidimensionales Array erstellen und mit Array() vorbelegen. Schreibe ich
Data:={}und füge mit aadd() hinzu ist die Menge von 20000 Datensätzen kein Problem.
Ich denke, dass data.={20000,20000} der falsche Befehl war. Kann das sein?

mfg
Wolfgang
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16508
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Arraymenge

Beitrag von Martin Altmann »

Ich weiß nicht, ob das der falsche Befehl war.
Dein Befehl hätte ein Array mit 20.000 Zeilen und 20.000 Spalten erzeugt.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
saul
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 284
Registriert: So, 26. Mär 2006 12:23

Re: Arraymenge

Beitrag von saul »

Siehste, das war nicht gedacht ich wollte ein zweidimensionales Array mit 20000 Zeilen und 2 Spalten erzeugen

mfg
Wolfgang
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Arraymenge

Beitrag von UliTs »

Martin Altmann hat geschrieben:Ich weiß nicht, ob das der falsche Befehl war.
Dein Befehl hätte ein Array mit 20.000 Zeilen und 20.000 Spalten erzeugt.

Viele Grüße,
Martin
Nicht ein Array mit 2 Zeilen und 1 Spalte?

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16508
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Arraymenge

Beitrag von Martin Altmann »

Nein.
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Arraymenge

Beitrag von UliTs »

Akso bei mir enthaelt Data

Code: Alles auswählen

data:={20000,20000}
nach der Zuweisung ein Array mit zwei Zeilen und einer Spalte!

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Arraymenge

Beitrag von AUGE_OHR »

saul hat geschrieben:Das kann doch nicht am Speicherplatz liegen, sonst würde das eindimensionale Array mit 300000 ja auch steiken.
auch bei einem 1-Dim Array von der Grösse sollte man sich überlegen ... es muss ja auch "gefüllt" werden ... das kann dauern bis was angezeigt wird.
und Änderungen sollen ja wohl auch in die DBF zurück geschrieben werden ... noch mal Arbeit

wenn du also nicht die ganzen Daten im Array "verarbeiten" willst dann musst du die auch nicht in ein Array laden den "so viele" Datensätze kannst du ja niemals "anzeigen".

dir fehlt noch ein Xbase++ "Baustein" : o:Datalink

es reicht doch völlig wenn du nur die Daten "um-schaufelst" welche zur Anzeige benötigt werden.
den "Rest" kann man dann doch "nachladen" ( Thread )

wenn es nun um deine "DbServer" Class gehen sollte : die wird ja wohl netzwerkfähig sein.
wenn du die Daten aber "jetzt" in ein Array lädst woher weist du dann ob die "später" noch aktuell sind ?
gruss by OHR
Jimmy
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16508
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Arraymenge

Beitrag von Martin Altmann »

Uli,
UliTs hat geschrieben:Akso bei mir enthaelt Data

Code: Alles auswählen

data:={20000,20000}
nach der Zuweisung ein Array mit zwei Zeilen und einer Spalte!

Uli
das ist bei jedem von uns der Fall - aber das ist ja auch nicht der Code von Wolfgang (und damit auch nicht sein Problem) gewesen :!:

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
saul
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 284
Registriert: So, 26. Mär 2006 12:23

Re: Arraymenge

Beitrag von saul »

Hallo,
wenn ich bei 40000 Datensätzen einen Filter setzte, da dauert im Netzwerk sehr lang wenn ich in xbpbrowse() einen skip mache.
Meine Idee:
Die Datensätze mit Hilfe "Set Filter" vorzusortieren, in ein Array zu laden und mir dieses in einer Tabelle auflisten zu lassen (z. B. alle Datensätze für ein Flugzeug, dauert bei mir im Netz ca. 4 Sekunden). Dies ist eine einmalige Angelegenheit mit dann ca. bis zu 1000 Einträgen im Array. Weitere Filter setzen, und das kommt häufiger vor, innerhalb dieses Array ist dann wesentlich schneller.
Gleichzeitig lerne ich Fenster, Methoden, Klassen, Pushbutton usw.. Zurückschreiben muß ich in diesem Fall nicht.
Du hast natürlich recht, das diese Datensätze nicht immer aktuell sind. Auch das nachladen in einem anderen Thread ist eventuell eine Möglichkeit. Das kommt aber später. Im Moment kämpfe ich noch mit Klassenvariablen, Fensterzuordungen und das Verständnis um all diese für mich neue Programiertechnik.
wenn du einen Index auf das Feld ( lower(Feld) ) machst kannst du es mit OrdWildSeek("*test*") in einer Schleife versuchen.
Werde ich mal versuchen. Ich kann mir aber nicht vorstellen, dass das schneller sein soll. Es muß doch auch jeder Datensatz angesprungen und ausgewertet werden. Aber ich bin dankbar für jeden Tip und werde das heute Abend testen.

mfg
Wolfgang
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Arraymenge

Beitrag von brandelh »

saul hat geschrieben: Meine Idee:
Die Datensätze mit Hilfe "Set Filter" vorzusortieren, in ein Array zu laden und mir dieses in einer Tabelle auflisten zu lassen
Meintest du eben die Anzahl der Sätze und Felder zu verringern, dann kannst du das tun, allerdings ist der Filter mit gleichzeitigem Index sehr langsam.

Es könnte schneller sein, den Index abzuschalten, die Filterbedingung zu setzen, das gewünschte ins Array (falls du keine eindeutige ID hast, auch die Recno() in einer Spalte speichern)
und dann mit ASORT() sortieren.
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Arraymenge

Beitrag von brandelh »

Martin Altmann hat geschrieben:Uli,
UliTs hat geschrieben:Akso bei mir enthaelt Data

Code: Alles auswählen

data:={20000,20000}
nach der Zuweisung ein Array mit zwei Zeilen und einer Spalte!

Uli
das ist bei jedem von uns der Fall - aber das ist ja auch nicht der Code von Wolfgang (und damit auch nicht sein Problem) gewesen :!:

Viele Grüße,
Martin
Ja die normalen Klammern sind von den geschweiften kaum zu unterscheiden, aber oben stand ARRAY(...)
Gruß
Hubert
saul
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 284
Registriert: So, 26. Mär 2006 12:23

Re: Arraymenge

Beitrag von saul »

Hallo,
da habe ich in der indizierten Datei SET SCOPETOP TO mkennzeich und SET SCOPEBOTTOM TO mkennzeich verwendet und dann das Array gefüllt. Da geht recht schnell.
Die anderen Möglichkeiten werde ich mal prüfen.

mfg
W. Kerkhoff
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Arraymenge

Beitrag von brandelh »

Wenn das passt, ist das die beste Lösung.
Gruß
Hubert
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Arraymenge

Beitrag von UliTs »

brandelh hat geschrieben:
Martin Altmann hat geschrieben:Uli,
UliTs hat geschrieben:Akso bei mir enthaelt Data

Code: Alles auswählen

data:={20000,20000}
nach der Zuweisung ein Array mit zwei Zeilen und einer Spalte!

Uli
das ist bei jedem von uns der Fall - aber das ist ja auch nicht der Code von Wolfgang (und damit auch nicht sein Problem) gewesen :!:

Viele Grüße,
Martin
Ja die normalen Klammern sind von den geschweiften kaum zu unterscheiden, aber oben stand ARRAY(...)
Also Wolfgang hat eindeutig geschweifte Klammern benutzt :D :
http://www.xbaseforum.de/viewtopic.php? ... 473#p74424

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16508
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Arraymenge

Beitrag von Martin Altmann »

Aber nicht in seinem ersten Posting und vor meiner Antwort :!:

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Arraymenge

Beitrag von UliTs »

Martin Altmann hat geschrieben:Aber nicht in seinem ersten Posting und vor meiner Antwort :!:

Viele Grüße,
Martin
Doch!
Deine Antwort bezog sich direkt darauf :!: :razz: :wink: :D

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16508
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Arraymenge

Beitrag von Martin Altmann »

KERL: Schwachsinn - setz' die Brille auf :!: 8)
Das hat er als erstes geschrieben:
Hallo,
kann es sein das, dass
Code: Alles auswählen
Data:=Array(300000)
Data:=Array(5000,5000)
funktioniert
Code: Alles auswählen
Data:=Array(20000,20000)

Eine Fehlermeldung bringt interne Datenstrukturen beschädigt?
Das kann doch nicht am Speicherplatz liegen, sonst würde das eindimensionale Array mit 300000 ja auch steiken.
Da sind nur () und keine {}

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2934
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Arraymenge

Beitrag von Wolfgang Ciriack »

Hallo Wolfgang,
warum die Daten noch in ein Array kopieren, wenn du mit Scopes arbeiten kannst.
Dann kannst du auch scopes auf die indizierte Datenbank setzen und sie direkt browsen.
Viele Grüße
Wolfgang
saul
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 284
Registriert: So, 26. Mär 2006 12:23

Re: Arraymenge

Beitrag von saul »

Hallo,
ich gestehe. Im ersten Einrag habe ich fälschlicherweise () statt {} geschrieben.

mfg
Wolfgang
saul
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 284
Registriert: So, 26. Mär 2006 12:23

Re: Arraymenge

Beitrag von saul »

Hallo Wolfgang,
mit Scops habe ich nur das indizierte Feld eingegrenzt. Nun möchte ich auf die dann noch vorhandenen Daten weitere Filter setzen. Das ist mit Array wesentlich schneller.

mfg
W. Kerkhoff
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: Arraymenge

Beitrag von Manfred »

Kommt darauf an. Probiere mal auf das gescopte Ergebnis einen Filter zu setzen. Diese Kombination kann echt verdammt schnell sein.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Arraymenge

Beitrag von brandelh »

saul hat geschrieben:Hallo,
ich gestehe. Im ersten Einrag habe ich fälschlicherweise () statt {} geschrieben.
mfg
Wolfgang
nein, du hast das falsch verstanden ;-)

hier wird direkt ein Array mit den 3 Elementen 1, 2, 3 erzeugt, dafür nimmt man geschweifte Klammern.

Code: Alles auswählen

aArrayVariable := { 1, 2, 3 }


hier wird eine Array mit x Elementen in der ersten Dimension und jeweils y Elementen in der zweiten Dimension erzeugt:

Code: Alles auswählen

aArrayVariable := array( x , y )
Gruß
Hubert
Antworten