mikrocontroller.net

Forum: PC-Programmierung Win; Wie Daten richtig lesen/weiterverarbeiten/speichern


Autor: Kroes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallole,

folgendes Problem: Möchte in minem Projekt Daten (ca.100 Teilnehmer mit 
je ca. 20 Eigenschaften (Name, Adresse, aber auch Zeiten...), getrennt 
mit Komma als Trennzeichen) in einem Textfile speichern. Textfile 
deswegen, damit auch ohne Programm die Daten ausgelesen werden.
Gedanke ist, das ganze in ein 2 Dimensionales Array zu laden und 
entsprechend der Grösse das ganze darzustellen auf dem Bildschirm (in 
einer Tabelle oder Textboxen (von Bedeutung?)?.
Jetzt bin ich nicht ganz sicher ob das die optimale Methode ist, das 
ganze darzustellen bzw. das ganze nachher im Programm zu manipulieren, 
sprich rechnen oder Werte hinzufügen.
Wie löst ein guter Programmierer das ganze? Ist das der richtige Weg, 
oder verbaue ich mir damit später etwas im Programm?

Danke für Tipps

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht lehne ich mich jetzt etwas zu weit aus dem Fenster; hängt
von deiner konkreten Aufgabenstellung ab.

Wenn du anstatt einem Komma einen Strichpunkt als Trennzeichen
nimmst (;), dann kannst du so eine Datei recht einfach mit
Excel bearbeiten. Das ist dann eine CSV Datei. Excel kann
sowas direkt einlesen und schreiben.

Bearbeiten der Daten in Excel ist ja dann relativ einfach.

Ansonsten: Nein du verbaust dir nichts. Ich würde allerdings
kein 2d Array nehmen. Der Grund ist einfach: In einem Array,
egal wieviele Dimensionen es hat, müssen alle Werte immer
vom gleichen Datentyp sein. Deine Kurzbechreibung klingt
jetzt aber nicht so, als ob das bei dir so wäre. In so einem
Fall akzeptiert man den gerne eine Krücke: Alles ist ein String.
Mit allen Problemen die daraus entstehen.

Die Lösung dafür: Definiere dir eine Struktur. In C wäre dass
ein struct, in Pascal ein Record. In anderen Sprachen heist
das anders, aber in irgendeiner Form hat jede ernstzunehmende
Sprache eine derartige Möglichkeit.

Die Struktur beschreibt dann den Aufbau einer Zeile deiner
Tabelle. Ein Array aus diesen Strukturen bildet dann die
komplette Tabelle.

Bsp: Du brauchst eine 2D Tabelle. Eine Zeile soll enthalten:
Name
Strasse
Ort
PLZ
Tel-Nr

(Achtung: Auch wenn es Telefon nummer heist, ist eine Tel-Nr
keine Nummer sondern wird besser in einem String abgelegt)

Also definiere ich den Aufbau einer Zeile (in C)

struct Eintrag
{
  char Name[40];
  char Strasse[50];
  char Ort[40];
  int  PLZ;
  char Tel[20];
};

Damit habe ich eine Zeile. Eine komplette Tabelle ist dann:

struct Eintrag Daten[100];

Meine Tabelle hat also Platz für 100 Datensätze. Jeder einzelne
Datensatz besteht (da er ja ein struct Eintrag ist) aus:
Name, Strasse, Ort, PLZ, und Tel

Um auf die PLZ vom Eintrag 3 zuzugreifen und dem 4481 zuzuweisen
würde ich schreiben:

   Daten[2].PLZ = 4481;

(2 deshalb, weil in C ja bei 0 angefangen wird zu zählen).

Eine struct hat auch den Vorteil, dass Dinge die zusammengehören
(nämlich die Daten für eine Person) auch zusammen bleiben.
Wenn ich also eine Funktion schreibe, die eine Visitenkarte
ausdrucken soll, dann übergebe ich der einen kompletten
struct Eintrag und dort ist ja alles enthalten, was zu einem
Eintrag gehört:

void PrintVisitenkarte( struct Eintrag Kunde )
{
  // Ausdrucken von Kunde.Name, Kunde.Ort, Kunde.Strasse
  // Kunde.PLZ etc
}

Um jetzt von den ersten 20 Kunden in der Tabelle eine
Visitenkarte auszudrucken, schreibe ich dann ganz
einfach:

   for( i = 0; i < 20; ++i )
     PrintVisitenkarte( Daten[i] );

Auch hier wieder: Eine Zeile der Tabelle wird als eine
Einheit betrachtet und als ganzes behandelt.

Wenn dann später noch zusätzliche Daten, wie zb. Fax Nummer
dazukommt, dann brauch ich an der Funktionsdefinition bzw.
am Aufruf überhaupt nichts ändern. Ich ergänze einfach
die Fax Nummer in der Struktur:

struct Eintrag
{
  char Name[40];
  char Strasse[50];
  char Ort[40];
  int  PLZ;
  char Tel[20];
  char Fax[20];
};

und überall wo eine struct Eintrag vorkommt, habe ich automatisch
auch das neue Feld Fax zur Verfügung.

Autor: Kroes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Super Tipp mit dem Struct. Darauf wäre ich wohl net gekommen :) Vorallem 
auch die Tatsache das die abgelegten Daten im Array vom gleichen Typ 
sein müssen. Das hätte ich bald gemerkt, da in mindestesn 2 weiteren 
Spalten die Zeit eines Rennlaufes stehen soll/wird. Und da wäre es 
schwierig geworden mitm String, anhand der Zeiten, die Fahrer zu 
sortieren :) Da man bei Excel das Trennzeichen beim konvertieren von 
Textdaten vorgeben kann, ist es unerheblich, welches gewählt wird, aber 
werd dann wohl gleich das Semikolon nehmen :) So, werd das ganze jetzt 
mal in C umsetzen und wenns passt mit C++ :) Danke

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.