array
-
Hallo zusammen,
ICh möchte eine .csv datei einlesen und eine Zahl aus der 2ten Spalte finden. Also die datei hat 8 Spalten also 7 Semikolon und ich will die eingegebene Zahl in der 2ten Spalte finden. Kann mir einer sagen wie ich die datei dann so in Array aufspliten kann??THX
-
std::ifstream stream("Datei.txt"); // Datei öffnen // Alle Checks übersprungen: stream.ignore( std::numeric_limits<std::streamsize>::max(), ';' ); // Die erste Spalte mitsamt Delimiter überspringen int a; // Entsprechenden Typ angeben stream >> a;
(Ungetestet)
-
HI, ich hab das folgend gelöst:
#include "stdafx.h" #include <vector> #include <iostream> #include <string> #include <sstream> #include <algorithm> #include <iterator> #include <fstream> #include <sstream> using namespace std; template<class T> std::string toString(const T& t) { std::ostringstream stream; stream << t; return stream.str(); } template<class T> T fromString(const std::string& s) { std::istringstream stream (s); T t; stream >> t; return t; } vector<string> &split(const string &s, char delim, vector<string> &elems) { stringstream ss(s); string item; while (getline(ss, item, delim)) { elems.push_back(item); } return elems; } vector<string> split(string s, char delim) { vector<string> elems; split(s, delim, elems); return elems; } vector<string> readData(const string &path) { std::vector<std::string> lines; ifstream fin(path); std::string line; while(getline(fin, line)) { lines.push_back(line); } return lines; } bool searchValue(vector<string> data, int column, string value, vector<string> &row) { for(unsigned int i=1; i<data.size();i++) { row = split(data[i],';'); string tc = row[column-1]; if(tc.compare(value)==0) return true; } return false; } string replace(string str, char c, char newc) { for(unsigned int i=0;i<str.size();i++) { if(str[i] == c) str[i] = newc; } return str; } double sumUpRow(vector<string> row) { double result = 0; for(unsigned int i=2; i<row.size();i++) { string value = row[i]; string newValue = replace(value,',','.'); result += fromString<double>(newValue); } return result; } int _tmain(int argc, _TCHAR* argv[]) { vector<string> data = readData("data.csv"); vector<string>* row = new vector<string>(); string number = ""; while(number[0] != 'e') { cout << "Suche nach T[C]: "; cin >> number; bool wasfound = searchValue(data,2,number, *row); if(wasfound == true) { double result = sumUpRow(*row); cout << "Ergebnis von T[C]:" << result << endl; } else cout << "T[C] nicht gefunden " << endl; } return 0; }
nun möchte an der Stelle
cout << "T[C] nicht gefunden " << endl;
so machen dass die vorherige und nächste zeile betrachtet werden.
Bsp. die zahl 217 existiert nicht. aber die Zahlen 216 und 218 existieren.
Also die datei sieht ungefähr so aus:
218;0.34;2.435;2.349
216;0.12;0.234;1.45
Nun möchte ich diese beide Zahlen linear interpolieren.
Kann mir einer dabei helfen???THX