Я пытаюсь разработать программу на языке C ++, которая будет читать текстовые файлы. Проблема в том, что текстовые файлы не являются одинаковыми.
Например, data1.txt выглядит
0.1
3.0
0.7
0.5
0.2
1.5
1.6
и data3.txt выглядит
33 37 53
35 36 52
34 37 53
35 37 51
34 38 52
33 38 51
33 39 52
33 37 52
34 37 52
34 39 52
Я думаю, что я должен как-то хранить данные в векторе. Как лучше всего это разработать, не заставляя пользователя сообщать программе, сколько измерений имеет каждая запись в текстовом файле? Я хочу, чтобы пользователь вызывал программу как
program data_.txt #
Где data_.txt = любой текстовый файл и # = количество кластеров
Вы можете использовать функцию boost :: split () (или Этот метод), чтобы получить количество записей в каждой строке. Затем, если вы теперь знаете, сколько существует записей, вы также знаете, с какими измерениями вы имеете дело. Это также позволяет реализовать простую проверку ввода (постоянное количество столбцов в файле).
Есть также хороший метод с stringstream, который позволяет разбить на любой пробел. Вы можете использовать следующее:
#include <sstream>
#include <vector>
#include <iterator>
template<typename T>
std::vector<T> split(const std::string& line) {
std::istringstream is(line);
return std::vector<T>(std::istream_iterator<T>(is), std::istream_iterator<T>());
}
Использование:
std::string line = "1.2 3.4 5.6e7";
std::vector<double> vec = split<double>(line);