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.