5`ter Versuch Dateihandling



  • Hallo Leute, leider konnte mir bisher keine sorecht hilfestellung geben also
    versuch ich es erneut, denn ich verzweifel langsam.

    Ich lese mit meinem C Prog. (Borland C++ Builder 5) über die serielle Schnittstelle Daten aus einem Microcontroller (Basic Tiger ein)
    Die Daten lasse ich zunächst in einem Rich Edit darstellen und die sehen dann z.B. so aus:

    200 321 352 353 200 200 330 350
    200 320 352 352 200 200 340 320
    200 321 352 353 200 200 330 350
    200 320 352 352 200 200 340 320
    200 321 352 353 200 200 330 350
    200 320 352 352 200 200 340 320

    Ein Block (also 3 Zahlen) sind immer 1 Bit, also insgeamt 8 Bit.
    Wieviele Zeilen ich habe hängt von der Datenmenge ab, die ich vorher nicht
    weiß.

    Ich kann diese in einen Datei speichern und auch wieder öffnen etc. aber das ist nicht mein Ziel.

    Ich möchte gerne das jeder Datensatz in eine Zelle des StringGrid geschrieben wird, das soll aber im Hintergrund passieren,denn die Daten sollen über die Tabelle ausgewertet werden. Zudem will ich diese Daten dann noch in eine Art Diagramm packen damit ich den Verlauf auch Graphisch darstellen kann.

    Also ???, irgendwelche Vorschläge ? Hilfe wäre sehr nett.



  • mal ne frage bebenbei. wie soll das vor sich gehen? 3 Zahlen sind ein Bit?
    Ein bit ist doch nur ein ja oder ein nein..??
    du solltest mal versuchen, zu erklären, wie du das ganze vor hast.
    ich weiß nur, dass Du für die meisten der Zahlen-3er schonmal 9 bit brauchst..?



  • Er meint sicher Ziffern ... 255 = 0xFF = 1 Byte, 000 = 0x00 = 1 Byte ... 😃

    Ich möchte gerne das jeder Datensatz in eine Zelle des StringGrid geschrieben wird
    

    Ich glaub hier liegt das uebel / Ansatz ...

    Was ist ein StringGrid ?
    Numerische Daten als Strings Speichern, ist BS (nein, BS != Betriebssystem), weil ist unneffizient in Hinsicht auf Verarbeitung und Speicherverbrauch ...

    Der naechste Punkt, DU pollst deine Daten sicher aus dem Controller ... Die Daten endlos im Speicher halten geht auch ned, weil irgendwann deine Ressourcen vollaufen ... dein progg soll ja sicher ne Weile Laufen ..... auserdem willst in deinem DIagramm sicher ned alle Daten darstellen von 6 Stunden zuvor oder so ..... Loggen willst du sicher auch ned alles ... nur nen Zeitbereich auf Bedarf ....

    Was DU brauchst ist nen anderes Konzept .... Nen Container, der Dir deine Daten(in binaerer Form, ned als String) mit ZeitStempel haelt ... und im regelmaessigen Intervallen (zum beispiel nach pollen) Veraltetete Daten verwirft, sprich den Speicher wieder freigibt ....

    Mit hilfe dieses Containers kannst dann deine Anzeige regelmaessig updaten ... und bei Bedarf auch logfiles schreiben ....

    Ciao ...



  • jap, aber die Zahl 352 ist binär 101100000
    It's a bit too much.. oder hab ich da was vergessen ( so von wegen komplement der binärzahlen für negative Zahlen,etc??)

    Also:
    Bitte ein Bit weniger.

    cYa
    DjR



  • Ich vermute das er sich verschrieben hat und mit 1Bit == 1Byte meint.
    Da alle Ziffern <6 und die erste <4 denke ich das es sich um Oktalzahlen handelt (1.Ziffer==2Bit 2.Ziffer==3Bit 3.Ziffer==3Bit).
    Platzsparender ist es allerdings die Daten gleich als binäre Bytes zu halten.



  • Hallo Jungs,

    erst mal danke für eure Antworten !! "RHBaum" hat das schon richtig gesehen
    den eine Zahl zwischen 0 und 255 ist 1 Bit, die Zahlen die ich dargestellt habe waren nur ein Beispiel !!!

    Ein StringGrid ist wie eine Excel Tabelle, gibt es als Objekt im Builder, da ich gedacht habe, OK, das Objekt ist da brauchst "nur noch" die Daten reinschreiben lassen, leider Fehlanzeige.

    Ja stimmt, ich hole die Daten aus meinem Controller, aber dort werden nach 5 Minuten die Daten schritt für schritt überschrieben, daher habe ich da keine Probleme vonwegen Speicherplatz. Ich habe also immer höchstens 5 Minuten Daten im Speicher.

    Kannst Du das mit dem Container evtl. etwas näher erläutern ???



  • Original erstellt von Moerser:
    den eine Zahl zwischen 0 und 255 ist 1 Bit

    Nein.
    Eine (Dezimal-)Zahl zwischen 0 und 255 ist ein Byte. Also 8 (acht) Bits.
    Eine Zahl zwischen 0 und 1 ist ein Bit.



  • @Moerser
    Naja, mit Bit und Byte lernt man noch, ich schau auch ned so genau hin! 😃

    Deine Daten bekommst sicher ned als strings ausm Controller ... sondern binaer in irgendwelcher Regelmaessigkeit und irgendwelchen Gemeinsamkeiten 🙂 Wenn man diese Regeln erkennt, kann man dann schnell mal nen super Objektmodell ausm Hut zaubern ....
    In deinem Fall sicher sowas wie ein Datenfeld aus mehreren Bytes zusammen mit nem Zeitstempel .... was man dann wiederum in einem Set nach Zeitstempel Sortiert im Speicher halten kann ....
    Oder wenn sicher bist, das die Daten eh geordntet eintreffen, und du nach 5 min alles wieder "ueberchreiben" willst, bietet sich ne Queue foermlich an ....

    Von deiner Anzeige (View oder wie auch immer du das nennen willst) holst DIr die Daten dann in regelmaessigen Abstaenden (pollen) und zeigst sie einfach an ....
    Ich weiss ned wie viel daten in den 5 min kommen aber ich denk mal deine Anzeige wuerde relativ schnell voll werden, und viel Anzeige beinhalten, die der User aufs mal sowieso ned verarbeiten kann ....
    und bei stringoperationen tut sich die CPU viel schwerer als bei binaeren Zahlen ....

    Ciao ...



  • OK, OK, sorry, das ist mir jetzt echt peinlich, brauche Dir aber wohl nicht zu sagen das Du recht hast mit den Bit`s und Byte`s !!

    RHBaum--> Danke für deine Antwort. Werde das die Tage mal ausprobieren ob ich das so hinbekomme. Hast mir auf jedenfall sehr geholfen, danke für deine Mühe !!!

    Danke nochmal

    gruß Moerser


Anmelden zum Antworten