Zum Inhalt springen

Aus CSV-Dateien lesen


Artery

Empfohlene Beiträge

Hey leute,

Ich hab ein kleines Problem beim Lesen aus CSV-Dateien...

Also ich habe in die CSV Datei in der ersten Zeile sozusagen eine Sprache gespeichert und dadrunter sollen dann Vokabeln der Sprache stehen.

Z.b.:

Deutsch | Englisch | Französisch

Arbeit | labour | travail

... | .... | ...

usw.

Jetzt hab ich schon die Spalte rausgefunden, als Zahl also, 2, wenn ich jetzt Englisch haben will.

Jetzt will ich alle Vokabeln die unter Englisch stehn aus der Datei lesen und in ein in ein 2D Char Array schreiben nur das krieg ich nicht ganz hin das ich auf die nächste Zeile der Spalte zugreife :(

fprintf(VBListe,"\n%s ; \n%s ; \n%s ; \n%s ; \n%s",ListenInhalt[0],ListenInhalt[1],ListenInhalt[2],ListenInhalt[3],ListenInhalt[4]);
Damit kann ich in die erste Spalte unter einander in die Datei schreiben, aber
fscanf(VBListe,"\n%s ; \n%s ;  \n%s",&ListenInhalt[0],&ListenInhalt[1],&ListenInhalt[2]);

Klappt nicht, er liest dann einfach den Inhalt der ersten Zeile

Wie krieg ich das jetzt hin? Ich mache das ganze Dateihandling in C!

und ja ich WILL char Arrays benutzen...

MfG Artery

Link zu diesem Kommentar
Auf anderen Seiten teilen

Viele Wege führen nach Rom ;-)

Einer dieser könnte so aussehen:

int ROWS, LINELEN;

ROWS = 1024;

LINELEN = 1024;

char My2DArray [ROWS][LINELEN];

Diese Informationen möchte ich Dir nahelegen: http://de.wikipedia.org/wiki/C_%28Programmiersprache%29

Bearbeitet von uenetz
Noch etwas hinzufügen
Link zu diesem Kommentar
Auf anderen Seiten teilen

Upps... Ich hätte vielleicht dazu schreiben sollen das ich es DYNAMISCH anlegen will :D

ja das man so eins anlegt ist mir klar xD, aber ich wollte wissen wie man es dynamisch macht ;)

okay habs mit:

char** Sprachenbla = new char*[3];

Sprachenbla[0] = new char[10];

hingekriegt dachte erst das geht nicht, weil er mir beim debuggen, wenn ich das Programm anhalte beim überwachen, nicht das komplette array anzeigt sonder nur:

- Sprachenbla 0x01e747f0 char * *

- 0x01e74838 "sadasdsadsad" char *

115 's' char

Bearbeitet von Artery
Link zu diesem Kommentar
Auf anderen Seiten teilen

Wie kann ich denn jetzt nen 2D char array dynamisch erweitern?

Gar nicht, ein Array ist eine statische Größe. Mit C++ kannst Du z.B. std::map / std::vector verwenden. Wenn Du es unter C dynamisch machen willst, dann musst Du komplett selbst mit malloc und realloc den Speicher für ein Element bzw das Array allokieren und dann die Daten anfügen. Beim Beenden des Programms musst Du dann den allokierten Speicher wieder frei geben

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du könntest die Sache zu Beginn vereinfachen, und erstmal (z.b. mit fgets) die Zeilen mit einer festen Maximalgröße ein einen Buffer einlesen. Für diesen Buffer, bzw für die Länge des Buffers (des Strings im Buffer, sizeof(buffer) ) Speicher anfordern (realloc) und deine Werte dann speichern. Deinen eingelesenen *Buffer kannst du mit "strtok" in tokens zerlegen.

Eine Schönere Variante wäre wenn du beim Einlesen aus der Datei zuerst mal für jeden einzelnen char Speicher anforderst. Wenn du das hast könntest du eine schönere/bessere Version machen und versuchen den Speicher blockweise anzufordern.

schau dir die befehle an:

malloc

realloc

fgets

getc

strtok

Ich hoffe dir hilft das weiter.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Mmmm... ne das ist mir etwas zu umständlich , da erstelle ich lieber ein neues Array ;D

Nur wenn ich jetzt ein Array löschen will geht das ja folgender Maßen:

delete[] MeinArray;

MeinArray = NULL;
wenn ich jetzt nen 2D Array habe, wie mache ich das dann? So?
delete[] MeinArray[0];

delete[] MeinArray;

MeinArray = NULL;

Link zu diesem Kommentar
Auf anderen Seiten teilen

Mmmm... ne das ist mir etwas zu umständlich , da erstelle ich lieber ein neues Array ;D

Das nützt Dir aber nichts, denn in dem neuen Arrays sind die alten Daten nicht drin. Wenn musst Du dann die alten Daten vorher kopieren, was bei großen Datenmengen nicht mehr sinnvoll ist und dann letztendlich auf ein realloc hinausläuft

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ne also ich mache das so das ich mir ein neues Arrayschaffe mit der passenden Größe, die Daten darein schreibe. Dann lösche und erstelle mein eigentliches Array neu mit der passenden Größe, schiebe die Daten da wieder rein. Und lösche das andere Array wieder jetzt war halt nur meine Frage, wie ich 2D Arrays wieder richtig "lösche"!

Link zu diesem Kommentar
Auf anderen Seiten teilen

In meinem letzten Posting habe ich Dich auf eine Quelle hingewiesen, die elementare Dinge zu C gut erklärt.

Anstatt hier zu posten, solltest Du Dir vielleicht diese Informationen zu Gemüte führen ;-)

Danach sollten all Deine Fragen eigentlich beantwortet sein.

Hier noch einmal den Link: C (Programmiersprache)

Oder Dir gleich das Buch von Kernighan & Ritchie bestellen ;-)

Na denn mal viel Erfolg ;-)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ernsthaft?

Was soll ich mit der Website? Ich will 1. keine Informationen über die Geschichte von C und was das ist, 2. Steht da nicht wie ich nun 2D Arrays richtig "lösche", ich weiß wie man wieder speicher frei gibt, wollte aber einfach wissen, ob das bei 2D arrays genau so ist oder ob das etwas anders geht...

Und da brauche ich so ne website nicht!

Link zu diesem Kommentar
Auf anderen Seiten teilen

jetzt war halt nur meine Frage, wie ich 2D Arrays wieder richtig "lösche"!
Gar nicht. Du kannst zweidimensionale Arrays nicht dynamisch anlegen, also brauchst du sie auch nicht zu löschen. Was du dynamisch anlegen kannst, sind Zeiger-Arrays, bei denen wiederum jeder Zeiger auf ein eigenes Array zeigt. Das fühlt sich in der Benutzung so an wie ein 2D-Array, aber es ist nach wie vor eine Menge von 1D-Arrays, die du genau wie sonst auch behandeln kannst. Wenn du für jeden einzelnen Zeiger in deinem Zeiger-Array Speicher geholt hast, musst du auch jeden einzelnen Zeiger wieder freigeben. Zu jedem malloc gehört ein free.
Link zu diesem Kommentar
Auf anderen Seiten teilen

achso k, also wenn ich jetzt das ganze über new[] gemacht habe reicht das mit delete[] ja aus!

Nur nochmal ne Frage muss ich dann einfach nur folgendes machen:

delete[] NewSprachenArrayTmp;

NewSprachenArrayTmp = NULL;
wenn ich folgend das angelegt habe?
NewSprachenArrayTmp = new char*[SprachenAnzahl];

NewSprachenArrayTmp[i] = new char [20];

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...