Я пытаюсь найти текстовый файл и извлечь данные после заголовка. Однако у меня есть некоторые проблемы с итераторами, которые я не знаю, как их преодолеть.
Это образец текстового файла:
Relay States
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
В идеале, я бы хотел позвонить LoadData<bool> something.LoadData("Relay States");
и вернуть std :: vector с {0,0,0,0,0,0,0,0, ...}.
template<typename T> std::vector<T> CProfile::LoadData(const std::string& name)
{
std::ifstream ifs(FILE_NAME);
std::vector<T> data;
std::istreambuf_iterator<char> iit = std::istreambuf_iterator<char>(ifs);
std::search(iit, ifs.eof(), name.begin(), name.end());
std::advance(iit, name.size() + 1);
T buffer = 0;
for(ifs.seekg(iit); ifs.peek() != '\n' && !ifs.eof(); data.push_back(ifs))
{
ifs >> buffer;
data.push_back(buffer);
}
return data;
}
Из того, что я понимаю, основные проблемы с моим кодом:
- std :: search - это неоднозначный вызов, как мне исправить это?
- Если ifs.seekg (iit) не разрешен законом, как мне сделать так, чтобы аргумент iit был действительным?
Спасибо.