000
13.01.2019, 21:36 Uhr
Listingleser
|
Hallo, möchte ohne c-array (chr ls_zeile[1024]) einen String (csv-Datensatz mit Strichpunkt-Trenner) mit getline lesen (bis Zeilenende). Ich bekomme einfach die richtige Syntax nicht hin da Anfänger. Sollte dann ein moderner vector bitte sein. Im späteren Schritt wird der csv-Datensatz in seine Einzeldaten zerlegt. Kann mir jemand helfen? Wäre super Danke
C++: |
#include <iostream> #include <vector> #include <string> #include <fstream>
std::vector<std::string> f10_explode( const std::string &delimiter, const std::string &explodeme);
//******************************************** int main(int argc, char *argv[]) {
std::string ls_zeile{"auto;lkw;bus"};
std::ifstream csvstream{"/home/linux/testdateien/csv_explode.csv"}; if (csvstream.fail()) { std::cerr << "Datei konnte nicht geöffnet werden" << std::endl; return -1; }
//char ls_zeile[1024]= {};
while (csvstream.getline(ls_zeile, 1024)) { // ????? hier ???? if (csvstream.fail()) { return -1; } } std::vector<std::string> v = f10_explode(";", ls_zeile);
for(unsigned int i=0; i<v.size(); i++) { std::cout <<i << " ["<< v[i] <<"] " <<std::endl; } }
std::vector<std::string> f10_explode( const std::string &delimiter, const std::string &str) { std::vector<std::string> arr;
int strleng = str.length(); int delleng = delimiter.length(); if (delleng==0) return arr;//no change
int i=0; int k=0; while( i<strleng ) { int j=0; while (i+j<strleng && j<delleng && str[i+j]==delimiter[j]) j++; if (j==delleng) { //found delimiter arr.push_back( str.substr(k, i-k) ); i+=delleng; k=i; } else { i++; } } arr.push_back( str.substr(k, i-k) ); return arr; }
|
Dieser Post wurde am 13.01.2019 um 21:37 Uhr von Listingleser editiert. |