Hallöchen,
ich bin gerade verzweifelt daran, eine CSV Datei zu lesen und den Inhalt in einem Array zu speichern. Die Inhalte in der CSV sind Text und Zahlen. Die Datei sieht so aus:
Nun probiere ich mit diesem c++ code alles einzulesen und in einem Array abzulegen:
Der Teil in dem ich die Anzahl der Felder auslese, speicher für das array reserviere usw. sollte eigentlich soweit passen. Klappt auch.
Beim Auslesen der einzelnen Inhalte zu ich mir leider recht schwer. Immer die Konvertierungen usw. die in meinen Augen "hingebogen" sind, aber anders klappts nicht. Die Konvertierung in Zeile 77 funktioniert genau beim ersten eintrag, danach z.B. nicht mehr.
Ein größeres Problem ist aktuell der Versuch den Namen usw aus der TXT auszulesen und in das Array zu packen. Klappt nie, da es immer Probleme mit der Konvertierung gibt.
Was könnt ihr mir raten? Wo hab ich große Fehler drin? Wie kann man es eleganter machen?
Ich bin um jede Hilfe und auch im Kritik dankbar!
ich bin gerade verzweifelt daran, eine CSV Datei zu lesen und den Inhalt in einem Array zu speichern. Die Inhalte in der CSV sind Text und Zahlen. Die Datei sieht so aus:
Code:
10.0.0;Lambsheim Raiffeisenstrasse;LA1;LA1_DB_10_1025;Raiffeisenstrasse Netzschutz ausgelöst;1;
10.0.1;Lambsheim Raiffeisenstrasse;LA1;LA1_DB_10_1026;Raiffeisenstrasse Batterie Störung;1;
10.0.2;Lambsheim Raiffeisenstrasse;LA1;LA1_DB_10_1027;Raiffeisenstrasse Ladegerät Störung;0;
Nun probiere ich mit diesem c++ code alles einzulesen und in einem Array abzulegen:
C++:
#include <fstream.h>
#include <stdio.h>
#include <iostream.h>
#include <sstream.h>
using namespace std;
main()
{
// öffnen Datei
fstream datei1("C:\\Programme\\Borland\\CBuilder6\\Projects\\csv_einlesen\\DIG_ALFA.CSV", ios::in);
if ( datei1.good() )
{
// Konvertierungsstreams
istringstream is,temp;
string inhaltzeile;
// Ermitteln der Anzahl der Eintraege //
// Vorlesen
getline(datei1,inhaltzeile);
// Zähler auf 0 wegen Vorlesen
int anzahl_eintraege = 0;
while ( !datei1.eof() )
{
// Anzahl +1
anzahl_eintraege++;
// Nachlesen
getline(datei1,inhaltzeile);
}
printf ("%d Elemente!\n\n",anzahl_eintraege);
// Strukt erzeugen
typedef struct {
int DB;
int Byte;
int Bit;
string Name;
string Name_kurz;
string Name2;
string Meldetext;
bool no_nc;
} DIG_ALFA_typ;
// Anlegen Array für Datei
DIG_ALFA_typ * feld;
feld = (DIG_ALFA_typ*) malloc(anzahl_eintraege * sizeof (DIG_ALFA_typ) );
// Eigentliches auslesen und umladen in array !
// Zurück an Anfang!
datei1.clear(0);
datei1.seekg(0L,ios::beg);
// Vorlesen
getline(datei1,inhaltzeile);
int element = 0;
while ( !datei1.eof() )
{
// Zeile ingelesen in is
is.str(inhaltzeile);
// Temp vars ...
string DB_str;
string Byte_str;
string Bit_str;
string no_nc_str;
string blubb;
int intzahl;
// Einzelnen Elemente auslesen
getline(is,DB_str,'.');
temp.str( DB_str );
temp >> intzahl;
// temp >> feld[element].DB;
getline(is,Byte_str,'.');
temp.str( Byte_str );
temp >> feld[element].Byte;
getline(is,Bit_str,';');
temp.str( Bit_str );
temp >> feld[element].Bit;
getline(is,blubb,';');
getline(is,blubb,';');
getline(is,blubb,';');
getline(is,blubb,';');
printf("%c%c%c",blubb[0],blubb[1],blubb[2]);
// getline(is,feld[element].Name,';');
// getline(is,feld[element].Name_kurz,';');
// getline(is,feld[element].Name2,';');
// getline(is,feld[element].Meldetext,';');
// printf("%s",blubb);
getline(is,no_nc_str,';');
temp.str( no_nc_str );
temp >> feld[element].no_nc;
cout << "DB: " << DB_str << " " << intzahl << " Byte: " << Byte_str << " Bit: " << Bit_str << " NO_NC: " << no_nc_str << endl;
// Zeiger erhöhen
element++;
// Nachlesen
getline(datei1,inhaltzeile);
}
// Schließen Datei
datei1.close();
// Speicher freigeben
free(feld);
}
else
{
printf("Fehler: Datei nicht vorhanden\n");
}
getchar();
}
Der Teil in dem ich die Anzahl der Felder auslese, speicher für das array reserviere usw. sollte eigentlich soweit passen. Klappt auch.
Beim Auslesen der einzelnen Inhalte zu ich mir leider recht schwer. Immer die Konvertierungen usw. die in meinen Augen "hingebogen" sind, aber anders klappts nicht. Die Konvertierung in Zeile 77 funktioniert genau beim ersten eintrag, danach z.B. nicht mehr.
Ein größeres Problem ist aktuell der Versuch den Namen usw aus der TXT auszulesen und in das Array zu packen. Klappt nie, da es immer Probleme mit der Konvertierung gibt.
Was könnt ihr mir raten? Wo hab ich große Fehler drin? Wie kann man es eleganter machen?
Ich bin um jede Hilfe und auch im Kritik dankbar!