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


  • Mod

    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


Log in to reply