Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Maxolia

unregistriert

1

20.02.2013, 22:07

.csv einlesen

Hallo.
Ich habe jetzt erfolgreich ein Programm geschrieben, das in eine Exel Datei (Eigentlich CSV Format) Daten einschreibt.
Wie kann ich es machen, dass ich mehreren String Arrays (z.b. String Zelle1[999], Zelle2[999], Zelle3[999], ....) dann Systematisch alle Werte aus jeder Zelle zuordne?
Also z.b.

Zelle1[0]= A1, Zelle1[1]= A2 ......
Zelle2[0]= B1, Zelle2[1]= B2 ......



Das Problem was ich jetzt sehe, abgesehen, dass ich noch nicht weiß wie ich überhaupt etwas einlesen kann, ist, dass CSV nur in belegten Zellen am ende ein ; macht.
Ich hoffe ihr könnt helfen.


Vielen Dank im Voraus

H5::

Treue Seele

Beiträge: 368

Wohnort: Kiel

  • Private Nachricht senden

2

20.02.2013, 22:41

Eine Möglichkeit wäre es mit Regulären Ausdrucken (Regex) zu arbeiten. C++ bietet dafür etwas in der STL an. Ansonsten bietet die Boost Bibliothek auch so etwas an, sind aber sehr ähnlich.

Regulärer Ausdruck
Regular expressions library

Einlesen könntest du eine Textdatei so:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
std::ifstream in_file(file_name, std::ios::in | std::ios::ate); // Datei oeffnen und ans Ende springen.
if (!in_file.is_open())
{
   // Fehlerbehandlung, Datei kann nicht geoeffnet werden.
   exit(0);
}

std::vector<char> buffer; // einen Buffer erstellen.
auto size = in_file.tellg(); // Gibt die Position in der Datei. Da wir uns am Ende befinden ist dies die Groesse.
in_file.seekg(0, std::ios::beg); // Zum Anfang der Datei springen. 
buffer.resize(size); // Unserem Buffer die Groesse der Datei zuweisen.
in_file.read(buffer.data(), buffer.size()); // Daten in den Buffer lesen.
buffer.push_back('\0'); // noch eine abschliessende 0 mitgeben.
std::string target(buffer.data()); // Unseren Buffer in einen String "umwandeln".

in_file.close(); // Datei schliessen.


Edit: Mal etwas Kommentar hinzugefügt.
:love: := Go;

Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »H5::« (21.02.2013, 18:32)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

3

21.02.2013, 06:34

Das Problem was ich jetzt sehe, abgesehen, dass ich noch nicht weiß wie ich überhaupt etwas einlesen kann, ist, dass CSV nur in belegten Zellen am ende ein ; macht.
Seit wann das denn? CSV hat und muss auch jede Zelle mit ";" abschließen, da sonst unmöglich ersichtlich ist, welcher Wert in welcher Zelle stand.
Lauter leere Zellen sieht dann halt so aus: ;;;;;;;;. Wenn Dein File das nicht so macht, ist es beschädigt oder falsch exportiert.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

H5::

Treue Seele

Beiträge: 368

Wohnort: Kiel

  • Private Nachricht senden

4

21.02.2013, 11:53

Eventuell hilft dir ja das hier auch etwas weiter:

CSV File Format Specification
:love: := Go;

Maxolia

unregistriert

5

21.02.2013, 20:13

Ok Danke.

Werbeanzeige