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
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.
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.