Artery Geschrieben 22. April 2011 Teilen Geschrieben 22. April 2011 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 22. April 2011 Teilen Geschrieben 22. April 2011 Die Zeile einlesen und dann das rausfiltern was du haben möchtest Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Artery Geschrieben 25. April 2011 Autor Teilen Geschrieben 25. April 2011 Ich mache es jetzt so das ich die csv datei so anlege das in jeder Zeile nicht wie vorher in jeder Spalte, die Vokabeln der einzelnen Sprachen stehen! Nur eine Frage kann mir jemand bitte zeigen, wie ich ein 2D Char Array anlege? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
uenetz Geschrieben 25. April 2011 Teilen Geschrieben 25. April 2011 (bearbeitet) 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 25. April 2011 von uenetz Noch etwas hinzufügen Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Artery Geschrieben 25. April 2011 Autor Teilen Geschrieben 25. April 2011 (bearbeitet) Upps... Ich hätte vielleicht dazu schreiben sollen das ich es DYNAMISCH anlegen will 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 25. April 2011 von Artery Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Artery Geschrieben 25. April 2011 Autor Teilen Geschrieben 25. April 2011 Das mit dem 15 min edit nervt mich :/ Wie kann ich denn jetzt nen 2D char array dynamisch erweitern? Also das ich einfach 1 element noch hinzufüge ohne den Inhalt der schon in den anderen Elementen steht zu löschen? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Thanks-and-Goodbye Geschrieben 25. April 2011 Teilen Geschrieben 25. April 2011 Das mit dem 15 min edit nervt mich :/ Tja, diese Einstellung ist hier schon ein Jahrzehnt aktiv, sie wird nicht für dich geändert werden. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 25. April 2011 Teilen Geschrieben 25. April 2011 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Thomas2903 Geschrieben 25. April 2011 Teilen Geschrieben 25. April 2011 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Artery Geschrieben 26. April 2011 Autor Teilen Geschrieben 26. April 2011 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; Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 26. April 2011 Teilen Geschrieben 26. April 2011 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Artery Geschrieben 26. April 2011 Autor Teilen Geschrieben 26. April 2011 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"! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
uenetz Geschrieben 26. April 2011 Teilen Geschrieben 26. April 2011 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 ;-) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Artery Geschrieben 26. April 2011 Autor Teilen Geschrieben 26. April 2011 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! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
uenetz Geschrieben 26. April 2011 Teilen Geschrieben 26. April 2011 Und da brauche ich so ne website nicht! Doch, denn da steht genau das drin, was Du wissen möchtest. Kleiner Tipp: Gültigkeit von Variablen ;-) Mehr ist dazu nicht mehr zu nenne. Viel Erfolg! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 27. April 2011 Teilen Geschrieben 27. April 2011 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 27. April 2011 Teilen Geschrieben 27. April 2011 http://www.fachinformatiker.de/c-c/62132-faq-vorschlag-dynamische-speicherverwaltung-c.html Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Artery Geschrieben 27. April 2011 Autor Teilen Geschrieben 27. April 2011 Mmm... Wo ist jetzt der unterschied zwischen Delte[] tmp und free(tmp) ? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 27. April 2011 Teilen Geschrieben 27. April 2011 Mit delete[] gibst du frei, was du mit new[] angefordert hast. Das gibt's nur in C++. Mit free gibst du frei, was du mit malloc angefordert hast. Das gibt's in C und in C++. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Artery Geschrieben 27. April 2011 Autor Teilen Geschrieben 27. April 2011 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]; Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.