#1 01.06.11 17:02
[C++] чтение таблицы из файла
возникла такая проблемка:
имеем файл, в котором есть неизвестное количество строк и в каждой строке некое количество чисел с плавающей точкой, причем в каждой строке количество чисел одинаково.
например такой файл:
1. 2. 3.
2. 3. 4.
3. 4. 5.
4. 5. 6.
6. 7. 8.
то есть 5 строк и по 3 числа в каждой строке.
как прочитать файл в таком формате и узнать сколько в нем было строк и "столбцов"
я сделал так:
// считаем сколько переводов строки
std::ifstream ar("test.dat", std::ios::in|std::ios::binary);
std::istreambuf_iterator<char> begin(ar), end;
int counter = std::count(begin, end, char('\n') );
ar.close();
// сохранием каждый элемент в вектор(кстати тоже надо)
std::vector<double> v;
std::fstream file_in ( "test.dat", std::ios::in );
std::copy (std::istream_iterator<double>(file_in), std::istream_iterator<double>(), back_inserter(v));
// ну и вычисляем сколько было столбцов
int counterX = v.size() / counter;
Но мне чето не очень нравится что нужно проходить по файлу два раза.
Как такое провернуть по-хитрее и по-красивее?
и тут же еще вопрос:
CString m_sInFileText;
// бла бла бла как то ее заполнили
std::basic_stringstream<wchar_t> ss(m_sInFileText.GetString());
std::vector<double> v;
// теперь как вектор v заполнить тем, что лежит в ss?
// пробую так, но естественно не соответствие типов
std::copy (std::istream_iterator<double>(ss), std::istream_iterator<double>(), back_inserter(v));
Исправлено Flinn (01.06.11 18:16)
Offline
#2 02.06.11 22:06
Re: [C++] чтение таблицы из файла
Не проходи два раза, ведь счётчик тебе нужен лишь для того чтобы узнать сколько столбцов...
Раз уж используешь CString, то можешь также использовать CStdioFile и его метод ReadString
далее разбиваешь строку на значения с помощью метода Tokenize, конвертируешь с помощью _ttof и засовываешь в список или вектор (по вкусу).
В итоге получается два вложенных цикла и на выходе список векторов
Offline

