Laden...

Daten lesen, speichern und behandeln

Erstellt von kstanger vor einem Jahr Letzter Beitrag vor einem Jahr 298 Views
K
kstanger Themenstarter:in
99 Beiträge seit 2022
vor einem Jahr
Daten lesen, speichern und behandeln

Hallo allerseits,
ich bin Anfänger. Ich möchte Daten aus einer Datei lesen, diese in einer Tabelle darstellen, modifizieren (ändern, hinzufügen, löschen) und wieder abspeichern. Jetzt suche ich eine angemessene Art dies zu tun. Hier geht es jetzt zuerst nur einmal um die Darstellung der Daten.
Ich habe mir vorgestellt, dass ich Datensätze in der Form von einem struct darstelle.


struct Farben
{
byte Rot
byte Gruen
byte Blau
string[20] Beschreibung // soll maximal 20 char lang sein
}

In der Datei sollen die Daten Byteweise abgespeichert sein.

  1. Ist struct der geeignete Ansatz?
  2. Wie wandele ich die Serie von Bytes aus der Datei in ein Array von Farben um?
    z.B. als Methode 1. Byte = Farbe[0].Rot, 2. Byte = Farbe[0].Gruen, 3. Byte = Farbe[0].Blau, 4. - 24. Byte = Farbe[0].Beschreibung, dann weiter mit Farbe[1] usw.

Wie soll ich vorgehen? Was wird empfohlen?
Mir geht es zuerst einmal um das Konzept. Die eine oder andere Codezeile zur Erklärung wäre auch nicht schlecht.

Lg Karl

Karl Stanger
4.942 Beiträge seit 2008
vor einem Jahr

Hallo,

so ganz werde ich aus deiner Beschreibung nicht schlau. Möchtest du jetzt eine Binärdatei oder nicht doch einfacher eine Textdatei lesen/schreiben?

Die Farbwerte kannst du als Color speichern. Und "soll maximal 20 char lang sein" erinnert an C-Programmierung (dort würde man dann char[20] verwenden). In C# jedoch einfach nur string (d.h. ein beliebig langer Text), in der Datei könnte dieser aber auf 20 Zeichen begrenzt sein.

Ob nun Struktur oder Klasse, hängt von der Größe und von der Verwendung ab. Hier wäre ein struct m.E. in Ordnung, da für Color (ARGB) ein Int32 verwendet wird und beim String nur die statischen Daten (Größe, interne Referenz auf Daten) direkt beinhaltet.

K
kstanger Themenstarter:in
99 Beiträge seit 2022
vor einem Jahr

Vielen Dank für deine Empfehlung.
Ich denke, dass ich eine Binärdatei brauche, da die Daten später in einen Arduino transferiert werden, wo sie dann auf einem Farbdisplay dargestellt werden. Letztendlich werden die Farben dann in einer Modelleisenbahnanlage zur Beleuchtung genutzt. Die Anzahl der unterschiedlichen Farben hält sich dann auch in Grenzen (schätze mal max. 20).
Da ich die Daten im Arduino als Bytes brauche, muss die Umwandlung dorthin irgendwo passieren: entweder direkt als Bytes speichern, oder anders und dann beim Transfer zum Arduino. Für das direkte speichern spricht die Tatsache, dass ich die Daten sogar auf ein MicroSD speichern kann und dieses dann im Arduino direkt lesen kann.
Mein struct würde dann so aussehen:


struct Farben
{
byte Rot
byte Gruen
byte Blau
char[20] Beschreibung
}


Die Umwandlung der struct-Daten in zu speichernde Bytes (nennt man das Serialisierung?) wäre noch zu klären. Gibt es da Empfehlungen?

Lg Karl

Karl Stanger
16.842 Beiträge seit 2008
vor einem Jahr

Also nen bisschen in die Dokumentation musst schon selbst schauen. Wir können (werden) das nicht für Dich programmieren 😉
Damit ein struct serialisierbar ist, musst etwas tun - aber das steht in den Grundlagen von structs/Serialisierung.
https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/serialization/
Damit Du ein struct serialisieren kannst, musst aber mit Eigenschaften arbeiten.

Ich denke, dass ich eine Binärdatei brauche, da die Daten später in einen Arduino transferiert werde

Völlig egal. Kannst auf nem Arduino auch mit Json-Dateien arbeiten, was das Serialisieren (mit System.Text.Json) einfacher macht.

Einfacher ist übrigens das Speichern von Farbwerten als ARGB.
Das ist dann einfach ein einzelner 32 Bit Integer. Umwandlung mit .NET Standardmethoden (Color.FromArgb (Api-Docs)) möglich.

190 Beiträge seit 2012
vor einem Jahr

Für Arduino habe ich das hier gefunden: ArduinoJson library

  • Wer lesen kann, ist klar im Vorteil
  • Meistens sitzt der Fehler vorm Monitor
  • "Geht nicht" ist keine Fehlermeldung!
  • "Ich kann programmieren" != "Ich habe den Code bei Google gefunden"

GidF