AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken .csv File durchsuchen oder andere Datenbank??
Thema durchsuchen
Ansicht
Themen-Optionen

.csv File durchsuchen oder andere Datenbank??

Ein Thema von Osse · begonnen am 26. Mai 2005 · letzter Beitrag vom 2. Jun 2005
Antwort Antwort
Seite 3 von 3     123   
Osse

Registriert seit: 25. Mär 2005
Ort: Hamburg
74 Beiträge
 
Delphi 5 Enterprise
 
#21

Re: .csv File durchsuchen oder andere Datenbank??

  Alt 2. Jun 2005, 17:02
Hey Alzaimar,

nicht leicht das ganze für einen E-Techniker , ABER es funktioniert, zumindest in dem kleien Beispiel. Doch da ist noch etwas:
Zitat:
Du kannst natürlich die Methode BtreeCompare an deine Bedürfnisse anpassen. Dabei musst Du aber darauf achten, das 'identische' Records (die also den Vergleichswert '0' liefern) als Identität behandelt, also auch überschrieben werden.
Ich will aber gar nicht dass die Daten überschrieben werden, sondern ich brauche alle Daten als Protokoll. Dies dient da´zu später nach bestimmten Zeiten zu gucken, wann das Telegramm gekommen ist. Ach , werden sie ja auch nicht, da der Timestamp immer anders ist. Dadurch wird der Verglichswert 0 so nie erreicht!!

Ist es dann überhaupt noch sinnvoll solche Datensruktur zu benutzen, oder würdest du etwas anderes vorschlagen??

Ich hab mal einfach versucht, nach den Daten zu sortieren und später das ganze wieder auszulesen. Kam aber leider nichts erfolgreiches raus, außerdem führt jede neue Suchroutine zu einer enormen Verlangsamung. Ansonsten kann ich die Daten ja so lassen wie sie sind und später beimauslesen dann sortieren aufm Grid ausgeben.

Hab das so realisiert :
Delphi-Quellcode:
  If a.msgbuff.ID < b.msgbuff.ID then aresult := -1
  else if a.msgbuff.ID > b.msgbuff.ID then aResult := +1
  else if a.msgbuff.DATA[0] < b.msgbuff.DATA[0] then aResult := -1
  else if a.msgbuff.DATA[0] > b.msgbuff.DATA[0] then aResult := +1
  else if a.msgbuff.DATA[1] < b.msgbuff.DATA[1] then aResult := -1
  else if a.msgbuff.DATA[1] > b.msgbuff.DATA[1] then aResult := +1
  else if a.msgbuff.DATA[2] < b.msgbuff.DATA[2] then aResult := -1
  else if a.msgbuff.DATA[2] > b.msgbuff.DATA[2] then aResult := +1
  else if a.msgbuff.DATA[3] < b.msgbuff.DATA[3] then aResult := -1
  else if a.msgbuff.DATA[3] > b.msgbuff.DATA[3] then aResult := +1
  else if a.msgbuff.DATA[4] < b.msgbuff.DATA[4] then aResult := -1
  else if a.msgbuff.DATA[4] > b.msgbuff.DATA[4] then aResult := +1
  else if a.msgbuff.DATA[5] < b.msgbuff.DATA[5] then aResult := -1
  else if a.msgbuff.DATA[5] > b.msgbuff.DATA[5] then aResult := +1
  else if a.msgbuff.DATA[6] < b.msgbuff.DATA[6] then aResult := -1
  else if a.msgbuff.DATA[6] > b.msgbuff.DATA[6] then aResult := +1
  else if a.msgbuff.DATA[7] < b.msgbuff.DATA[7] then aResult := -1
  else if a.msgbuff.DATA[7] > b.msgbuff.DATA[7] then aResult := +1
  else aResult := 0;
end;
Wenn ich die Daten dann in einer Listbox ausgebe, siehts am Anfang noch recht gut aus, aber dann
Zitat:
ID Data 1 Data2 Data3 .....
21 ; 20 ; 68 ; 89 ; 126 ; 219 ; 107 ; 216 ; 248
21 ; 20 ; 90 ; 65 ; 95 ; 150 ; 226 ; 65 ; 247
21 ; 20 ; 98 ; 55 ; 123 ; 20 ; 197 ; 127 ; 170
21 ; 20 ; 105 ; 80 ; 159 ; 236 ; 28 ; 52 ; 235
21 ; 20 ; 114 ; 104 ; 119 ; 201 ; 197 ; 138 ; 117
21 ; 20 ; 120 ; 153 ; 63 ; 97 ; 8 ; 40 ; 17
21 ; 20 ; 125 ; 117 ; 125 ; 13 ; 27 ; 181 ; 29
21 ; 20 ; 127 ; 240 ; 30 ; 250 ; 85 ; 155 ; 218
21 ; 20 ; 133 ; 191 ; 180 ; 119 ; 249 ; 53 ; 15
21 ; 20 ; 145 ; 249 ; 140 ; 235 ; 107 ; 72 ; 234
21 ; 20 ; 156 ; 20 ; 160 ; 154 ; 213 ; 109 ; 122
21 ; 20 ; 168 ; 212 ; 233 ; 4 ; 217 ; 147 ; 13
21 ; 20 ; 186 ; 240 ; 41 ; 60 ; 122 ; 180 ; 96
21 ; 20 ; 196 ; 39 ; 115 ; 63 ; 66 ; 92 ; 207
21 ; 20 ; 196 ; 173 ; 179 ; 123 ; 106 ; 218 ; 234
21 ; 20 ; 223 ; 225 ; 30 ; 0 ; 33 ; 249 ; 250
21 ; 20 ; 234 ; 48 ; 58 ; 56 ; 30 ; 140 ; 175
21 ; 21 ; 1 ; 234 ; 220 ; 30 ; 181 ; 177 ; 110
21 ; 21 ; 2 ; 19 ; 153 ; 150 ; 121 ; 191 ; 227
Wie gesagt, wenns nicht anders geht, kann ich die Sortierung auch in der Anzeige machen. Da kommt es auf die Zeit nicht an.

Hättest du eine andere Idee??

Nochmal für die Super Unterstützung, ist nicht so leicht für mich..
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#22

Re: .csv File durchsuchen oder andere Datenbank??

  Alt 2. Jun 2005, 17:17
Was ist an der Listbox so falsch? Sieht doch gut aus, sind die nun alle sortiert oder bin ick zu blind? Egal.

Sag doch einfach mal, WONACH du suchen willst, bzw. WAS du auswerten möchtest. Dann deichseln wir das schon. (Oder auch nicht )

Es IST ein vertracktes Problem. Wenn das direkte Speichern in den B-Baum so nicht geht, dann würde ich auch einfach (is ja wohl nur ne Testphase) die Teile in eine Text-Datei reinballern und mit geeigneten suchroutinen später auswertungen machen.

Fragen:
1. Musst Du die Records wochenlag mitschneiden, oder nur für 1-2 Tage, oder wie?
2. Wie hoch ist die Datenmenge, wenn alles ok ist?
3. (Wiederholung) Wonach willst Du suchen und was brauchst Du als Filter/Anzeige?
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Osse

Registriert seit: 25. Mär 2005
Ort: Hamburg
74 Beiträge
 
Delphi 5 Enterprise
 
#23

Re: .csv File durchsuchen oder andere Datenbank??

  Alt 2. Jun 2005, 17:56
NAja, wenn ich mir die letzte Spalte so angucke, ist das wohl nicht mehr so ganz richtig mit 248, 247,170,235,117...

Zitat:
1. Musst Du die Records wochenlag mitschneiden, oder nur für 1-2 Tage, oder wie?
Ich denke, dass das Programm so 2Tage durchläuft. Wollte jeden Tag eine eigene Datei anlegen. Später solle és dann auch möglich sein Nacheinander in den Dateien zu suchen. Sollte hier aber nicht das Problem sein, oder??!!

Zitat:
2. Wie hoch ist die Datenmenge, wenn alles ok ist?
Ok, dann will ich mal einen losrechnen. Mayby hab ich da ja einen Fehler drin.

Max. Übertragungsrate 1 Mbit/s wenn das kürzeste Telegramm 40Bit lang ist und eine Busauslastung von 100% besteht, wovon ausgegeangen werden muss, dann beläuft sich das ja auf:

1oooooo Bit/s
------------- = 25000 Telegramme/s = 25 Telegramme/ms oder hab ich da falsch gerechnet.
40 Bit

Nun die 25000 Telegramme/s * 3600 um auf Stunden zu kommen := 90000000bit/h um das mal komfortabel darstellen

1 byte = 8 bit -> 11250000Byte/h -> 11,25Mb pro Stunde oder

Zitat:
3. (Wiederholung) Wonach willst Du suchen und was brauchst Du als Filter/Anzeige?
- Ich will zunächst nach ID gucken können und alle Telegramme mit der Such ID Darstellen können.
- Ein unterpunkt ist nun nach bestimmten Daten zu suchen, mit zugehöriger ID. Die ID muss immer mit angegben sein.
Bsp.

Ich möchte nach der ID 200 suchen und zwar im 1.Datenbyte sollen alle Einträge zwischen 23-98 und im 4. Datenbyte 34-78 angezeigt werden. Welche Werte die anderen Datenbytes haben ist völlig wurst.
Hier ein Bsp für die Suchanfragen:

ID Data0 Data1 Data2 Data3 Data4 Data5 Data6 Data7
200 --- ----- ---- ----- ---- ---- ---- ----- (alle Telegramme mit ID 200 darstellen)
200 --- 23-98 ---- ----- 34-78 ---- ----- ------

Das ist das höchste der Gefühle, wonach gesucht werden soll.
Wichtig ist nur, dass immer die ID mit angegeben wird. Das ist der "Schlüssel".

Filter(werden nur für die Anzeige realisiert) und das mache ich schon beim ankommen der Telegramme, geht schon. Aber bin für besserungen offen.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#24

Re: .csv File durchsuchen oder andere Datenbank??

  Alt 2. Jun 2005, 19:09
Deine Ordnung, die du aufbaust, bedingt, das erst nach ID, dann nach erstem byte, dann nach dem 2. usw sortiert wird. Insofern ist alles o.k. Schau Dir das alles an. Innerhalb gleicher ID ist nach dem 1.Byte aufsteigend sortiert, innerhalb des 2. auch (kommt nicht vor, egal).

Wir haben also 12 MB/h (aufrunden ist immer gut), dann sind das gerade mal ca. 1G für 2 Tage. Mein Btree kann 2G verwalten (meine ich).

Wenn Du nur nach allen Telegrammen einer ID 200 mit 1.DATA zwischen 23 und 98 suchen willst, dann müsstest Du einen Cursor erzeugen, der den Bereich zwischen
ID:200, DATA :23,0,0,0,0,0,0,0 und
ID:200, DATA:98,255,255,255,255,255,255,255
abdeckt. Die Ordnung ist ja streng von links nach rechts. Dann scanst Du den Bereich und zeigst nur die Recs, deren 4.Datenbyte in dem Bereich liegt. Das bekommst Du relativ leicht allgemeingültig hin. Das geht relativ schnell, so im Bereich von (geschätzten) 100.000 - 500.000 recs/sec. Ich meine, Du solltest mal ein paar mio recs ablegen und dann schauen.

Wenn die Performance hinhaut und mein Tool die Tests (Stabilität, Speicherlecks) besteht (also, wenn es 2 Tage durchhält), dann bist Du ein gemachter Mann
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Osse

Registriert seit: 25. Mär 2005
Ort: Hamburg
74 Beiträge
 
Delphi 5 Enterprise
 
#25

Re: .csv File durchsuchen oder andere Datenbank??

  Alt 2. Jun 2005, 19:33
Jo, super dann wollen "wir" das mal versuchen. Werde erstmal austesten, ob das ganze Threadsicher ist.

Zitat:
Wenn die Performance hinhaut und mein Tool die Tests (Stabilität, Speicherlecks) besteht (also, wenn es 2 Tage durchhält), dann bist Du ein gemachter Mann
Super das Tool. Sag mal, wo hast du das denn her, oder etwa selber .

Ist auf jedenfall toll.

Zitat:
Mein Btree kann 2G verwalten (meine ich).
Was passiert dann?? explodiert die Festplatte??

Ok, wird der Adressraum vom Zeiger dann zu groß???

So, dann mal ran an die Buletten, nach soviel Input werde ich schön weiter

Gruß aus dem verregneten Hamburg
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#26

Re: .csv File durchsuchen oder andere Datenbank??

  Alt 2. Jun 2005, 19:41
Die Teile musste ich selbst schreiben.
Bei Dateigrößen über 2GB wird unser Universum, so wie wir es kennen, durch etwas viel Schrecklicheres ersetzt. Es gibt Gerüchte, nach dies schon geschehen ist (Frei nach "Hitchhickers Guide to the Galaxy").
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12: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