Sekcia o programovaní, programovacích jazykoch...
materik
Sponzor fóra gold
Príspevky: 2369 Dátum registrácie: Št 10. Apr, 2008, 14:00
Bydlisko: Prešov
Príspevok
od používateľa materik » Po 07. Mar, 2011, 19:21
celkom tu blbnem s takou hovadinou...
nacitavam data z csv (ako string) a potrebujem ich dostat do vector-a alebo do pola (ako double).
Viete o nejakom dobrom sposobe?
Idealne hned pri nacitani a triedeni aby sa to overilo a skonvertovalo na double.
touto funkciou si nahadzujem data do vektora
vector <string> readCSV(fstream &file)
{
string csvLine;
vector<string> csvColumn;
vector<string> csvString;
while(getline(file, csvLine) )
{
istringstream csvStream(csvLine);
string csvElement;
while(getline(csvStream, csvElement, ';') )
{
csvColumn.push_back(csvElement);
}
}
return csvColumn;
}
PC -> Topping DX7 Pro+ -> Meze 109 PRO / Microlab B77
Motorola EDGE 50 Pro -> Sennheiser Momentum 4 TWS
pEpinko
Používateľ
Príspevky: 850 Dátum registrácie: Po 19. Máj, 2008, 09:31
Bydlisko: BA/NR
Príspevok
od používateľa pEpinko » Po 07. Mar, 2011, 20:04
Bud
atof , alebo tomu nerozumiem.
materik
Sponzor fóra gold
Príspevky: 2369 Dátum registrácie: Št 10. Apr, 2008, 14:00
Bydlisko: Prešov
Príspevok
od používateľa materik » Po 07. Mar, 2011, 20:16
s tym som to primarne planoval spravit, ale on akosi nezvlada C++ triedu
string
zastavi ma to s hlaskou:
cannot convert parameter 1 from 'std::string' to 'const char *'
po dlhom googleni som sa dostal k niecomu takemu
for (long i=0; i<(long)temp.size(); ++i) {
if (temp=='.') {
// token contains a '.' character - either a string or a floating point
containsPeriod++;
} else if ( temp<48 || 57<temp ) {
// token contains non-numeric characters - string (sorry no hex)
containsAlpha++;
}
}
if (containsAlpha==0 && containsPeriod==0) {
longArray.push_back(atoi(temp.c_str()));
order.push_back(0);
} else if (containsPeriod==1 && containsAlpha==0) {
doubleArray.push_back(atof(temp.c_str()));
order.push_back(1);
} else {
stringArray.push_back(temp);
order.push_back(2);
}
teda pekne jeden string po druhom ich prebehnut a hladat znaky. U mna bodku a cisla...
tu je link na celu funkciu http://www.dreamincode.net/code/snippet1316.htm
ALE, primarne mi ide o to, ci existuje aj JEDNODUCHSI SPOSOB?
PC -> Topping DX7 Pro+ -> Meze 109 PRO / Microlab B77
Motorola EDGE 50 Pro -> Sennheiser Momentum 4 TWS
pEpinko
Používateľ
Príspevky: 850 Dátum registrácie: Po 19. Máj, 2008, 09:31
Bydlisko: BA/NR
Príspevok
od používateľa pEpinko » Po 07. Mar, 2011, 22:45
Mozno takto:
http://codepad.org/6F1XSrNH
Ale rozhodne je to velmi neC++ sposob.
materik
Sponzor fóra gold
Príspevky: 2369 Dátum registrácie: Št 10. Apr, 2008, 14:00
Bydlisko: Prešov
Príspevok
od používateľa materik » Po 07. Mar, 2011, 23:41
tak som bol nuteny to spravit cez funkciu, takto to teraz vyzera
double stringConvert(string csvElement)
double stringConvert(string csvElement){
double returnDouble = 0;
string temp;
unsigned long start=0;
unsigned long end=0;
while (end<=csvElement.size()) {
end++;
if (end<csvElement.size() && csvElement[end]!=',') {
continue;
}
temp.assign(csvElement,start,end-start);
int containsPeriod=0;
int containsAlpha=0;
for (long i=0; i<(long)temp.size(); ++i) {
if (temp=='.') {
containsPeriod++;
}
else if ( temp<48 || 57<temp ) {
containsAlpha++;
}
}
if (containsPeriod==1 && containsAlpha==0) {
returnDouble = atof(temp.c_str());
}
else {continue;}
end++;
start=end;
}
return returnDouble;
}
vector <double> readCSV(fstream &file)
vector <double> readCSV(fstream &file){
string csvLine;
//vector<string> csvColumn;
vector<double> csvDouble;
while(getline(file, csvLine) )
{
istringstream csvStream(csvLine);
string csvElement;
double csvGetDouble;
while(getline(csvStream, csvElement, ';') )
{
csvGetDouble = stringConvert(csvElement);
//csvColumn.push_back(csvElement);
csvDouble.push_back(csvGetDouble);
}
}
//return csvColumn;
return csvDouble;
}
Myslim, ze to ide, ak by ste niekto videli nejaky zadrhel, tak mi pls dajte vediet
PC -> Topping DX7 Pro+ -> Meze 109 PRO / Microlab B77
Motorola EDGE 50 Pro -> Sennheiser Momentum 4 TWS