2013-05-18 1 views
1

Я некоторые запятые данных в файл, например, так:Назначения Запятой разделители данных в векторные

116,88,0,44 66,45,11,33

и т.д. Я знаю, размер, и я хочу, чтобы каждая строка была его собственным объектом в векторе.

Вот моя реализация:

bool addObjects(string fileName) { 

ifstream inputFile; 

inputFile.open(fileName.c_str()); 

string fileLine; 
stringstream stream1; 
int element = 0; 

if (!inputFile.is_open()) { 
    return false; 
} 

while(inputFile) { 
     getline(inputFile, fileLine); //Get the line from the file 
     MovingObj(fileLine); //Use an external class to parse the data by comma 
     stream1 << fileLine; //Assign the string to a stringstream 
     stream1 >> element; //Turn the string into an object for the vector 
     movingObjects.push_back(element); //Add the object to the vector 
    } 



inputFile.close(); 
return true; 

}

Не повезло до сих пор. Я получаю ошибки в

< < stream1 fileLine

и заявление push_back. Поток 1 говорит мне, что нет никакого совпадения для оператора <10 (должно быть, я включил библиотеку), а последнее говорит мне, что movingObjects не объявлен, казалось бы, думая, что это функция, когда она определена в заголовке как мой вектор ,

Может ли кто-нибудь помочь? Очень признателен!

+0

'станд :: вектор movingObjects();' это объявление функции, если это то, что вы написали. Чтобы вызвать конструктор по умолчанию, 'std :: vector moveObjects {};' работает, но также работает 'std :: vector movingObjects;'. Для этого не требуется никаких кронштейнов/скобок. – chris

+0

Поиск StackOverflow для «векторного файла». Слишком много из этих связанных вопросов до сих пор. –

+0

Кроме того, положите 'getline' в условие цикла, чтобы он не использовал неудавшееся чтение. – chris

ответ

0

Если я правильно понял ваши намерения это должно быть близко к тому, что вы пытаетесь сделать:

#include <algorithm> 
#include <fstream> 
#include <iostream> 
#include <string> 
#include <sstream> 
#include <vector> 

void MovingObj(std::string & fileLine) { 
    replace(fileLine.begin(), fileLine.end(), ',', ' '); 
} 

bool addObjects(std::string fileName, std::vector<int> & movingObjects) { 
    std::ifstream inputFile; 
    inputFile.open(fileName); 

    std::string fileLine; 
    int element = 0; 
    if (!inputFile.is_open()) { 
     return false; 
    } 
    while (getline(inputFile, fileLine)) { 
     MovingObj(fileLine); //Use an external class to parse the data by comma 
     std::stringstream stream1(fileLine); //Assign the string to a stringstream 
     while (stream1 >> element) { 
      movingObjects.push_back(element); //Add the object to the vector 
     } 
    } 
    inputFile.close(); 
    return true; 
} 

int main() { 
    std::vector<int> movingObjects; 
    std::string fileName = "data.txt"; 
    addObjects(fileName, movingObjects); 
    for (int i : movingObjects) { 
     std::cout << i << std::endl; 
    } 
}