-
Forum: Object-Pascal / Delphi-Language
Delphi
by Diamondback2007,
22. Jul 2008
Ich darf halt tmpData nicht als PInteger deklarieren... Dann gibt er mir den fehler dass die Parameter stimmen müssen. Ich brauche also einen untyped Pointer. Außerdem reicht Integer halt nicht aus von der Größe. Bei 13 Millionen Einträgen kommt da was zusammen ;)
-
Forum: Object-Pascal / Delphi-Language
Delphi
by Diamondback2007,
22. Jul 2008
Okay, Problem gelöst. Ich musste natürlich Data nicht als PInteger sondern als PInt64 deklarieren.
Hier der gesamte Code:
var
StringDic : TStringDictionary;
tmpPZN : Integer;
Data : PInt64;
sl : TStringList;
sID : string;
-
Forum: Object-Pascal / Delphi-Language
Delphi
by Diamondback2007,
22. Jul 2008
Hmmm... Ich habe noch etwas Probleme, die Werte aus der Map auszulesen...
Hier mal mein Code:
StringDic.First;
ListBox1.Items.BeginUpdate;
for i := 0 to StringDic.TotalCount - 1 do
begin
StringDic.Next(sID, tmpData);
ListBox1.Items.Add('ID: ' + sID + ' Summe: ' + IntToStr(Integer(tmpData^)));
end;
-
Forum: Object-Pascal / Delphi-Language
Delphi
by Diamondback2007,
22. Jul 2008
Also das mit dem Array scheint nicht zu funktionieren, dafür das mit der Hashmap aber umso besser :)
Also wenn die Daten die da jetzt rausgekommen sind wirklich stimmen, dann :shock: .
Er braucht jetzt für die 13 Millionen Einträge kürzer als vorher für 100.000 :lol: .
Also vielen Dank schonmal :) :) .
Das war ja eine super Hilfe :dp:
-
Forum: Object-Pascal / Delphi-Language
Delphi
by Diamondback2007,
22. Jul 2008
Achs
Okay vielen Dank erst einmal :) Dann werde ich mich mal damit beschäftigen ;)
Wenn man das Array dynamisch erzeugt klappts dann auch größer oder was? :)
-
Forum: Object-Pascal / Delphi-Language
Delphi
by Diamondback2007,
22. Jul 2008
Ähm naja das sind Daten aus dem medizinischen Bereich. Kann ich euch also nicht allzu viel zu sagen.
Es geht nur darum erst mal alle doppelten zu finden und zu addieren und danach alle IDs die die selbe Summe an PZNs haben zu einer Gruppe zusammenzufassen.
Die Hashmap ist groß genug, die vergrößert sich von selber :)
-
Forum: Object-Pascal / Delphi-Language
Delphi
by Diamondback2007,
22. Jul 2008
So, ich hätte jetzt folgenden Code:
for i := 0 to sl.Count - 1 do
begin
if not StringDic.Find(ExtractID(sl.Strings), Data) then
begin
tmpPZN := StrToInt32_JOH_IA32_7_a(ExtractPZN(sl.Strings));
Data := @tmpPZN;
StringDic.Add(ExtractID(sl.Strings), Data);
end
-
Forum: Object-Pascal / Delphi-Language
Delphi
by Diamondback2007,
22. Jul 2008
Nochmal zu der Hashmap.... Könnte ich die auch so verwenden wie das mit dem Array gezeigt wurde? Also Liste durchgehen, ID als Index in der Hasmap speichern und dann als Data die PZN. Dann über Find gucken ob die ID schon vorhanden ist, und wenn ja dann addieren, wenn nein dann enben hinzufügen. Wäre das schnell? Wie könnte ich denn den Dataoutpout bei Find verändern? Einfach den Wert an der...
-
Forum: Object-Pascal / Delphi-Language
Delphi
by Diamondback2007,
22. Jul 2008
Ja, da werde ich mich wohl mal mit auseinander setzen. Das sieht ja ganz nett aus ;)
Ich möchte zwar nicht die doppelten Einträge löschen sondern nur suchen und den zweiten Teil des Eintrages (die PZN) ausummieren. Aber ist ja prinzipiell kein großer Unterschied.
Das habe ich mal grade ganz schnell getestet, aber ich glaube ich kann keine Array erstellen die so groß sind. Jedenfalls...
-
Forum: Object-Pascal / Delphi-Language
Delphi
by Diamondback2007,
21. Jul 2008
Ist es denn sinnvoll 13 Millionen Einträge vorher zu sortieren? wenn ja wäre das natürlich super :)
-
Forum: Object-Pascal / Delphi-Language
Delphi
by Diamondback2007,
21. Jul 2008
Hm...Das verstehe ich nicht... Wo extrahiere ich denn zwei Mal die selben Daten?
-
Forum: Object-Pascal / Delphi-Language
Delphi
by Diamondback2007,
21. Jul 2008
Auf die Daten an sich habe ich leider keinen Einfluss, die muss ich nehmen wie sie kommen.
Und wo speichere ich eine zahl nicht als Zahl? eher andersherum ;) Einen string als Zahl ;)
Das Setzen von SetLength vor der Schleife hat bei 100.000 Sätzen noch nicht wirklich was gebracht, aber ich denke bei mehr sollten das was bringen.
Also sl ist nicht sortiert und die Größe ändert sich...
-
Forum: Object-Pascal / Delphi-Language
Delphi
by Diamondback2007,
21. Jul 2008
Obwohl also ich könnte natürlich eine statisches Array draus machen mit ner Größe die auf jeden Fall reicht. Macht das Sinn?
-
Forum: Object-Pascal / Delphi-Language
Delphi
by Diamondback2007,
21. Jul 2008
Ich weiß aber nicht wie groß das Array wird... :(
-
Forum: Object-Pascal / Delphi-Language
Delphi
by Diamondback2007,
21. Jul 2008
Hallo zusammen,
ich habe hier einen ganz kleinen Algorithmus den ich gerne noch etwas optimieren würde, da er sehr zeitkritisch ist.
Hier mal die interessanten Stellen:
while sl.Count > 0 do
begin
SetLength(IDArray, Length(IDArray) + 1);