Intel TBB: прочитайте файл, примените функцию для каждой строки и сохраните результат в векторе

С помощью Intel TBB я пытаюсь прочитать файл «serial», применить функцию к каждой строке файла и сохранить результат в вектор типа A.

struct A
{
long long time;
double price;
A(long long t, double p) : time(t),price(p){};
}

Я создал следующий конвейер

vector<A> parallelFile(string fileName) {

ifstream fe(fileName);
string orden_fichero;
vector<A> ord;
parallel_pipeline( /*max_number_of_tokens=*/16,
make_filter<void,string>(
filter::serial,
[&](flow_control& fc)->string
{
getline(fe,orden_fichero);
if(fe.eof())
{
fc.stop(); // stop processing
return NULL;
}
else
{
return orden_fichero;
}
}
) &
make_filter<string,A>(
filter::parallel,
[](string p) ->A{
auto position = p.find('"',28);
auto price = stod(p.substr(position+2));
auto time = dateToMs2(p.substr(0,26).c_str());
return A(time, price);
}
) &
make_filter<A,void>(
filter::serial,
[&ord](A x) {ord.push_back(x);}
)
);
return ord;
}

int main()
{
vector<A> david=parallelFile("input.txt");

return 0;
}

где dateToMs — это функция, которая возвращает long long.

При выполнении этой линии y возникает следующая ошибка:

TBB Warning: Exact exception propagation is requested by application but the
linked library is built without support for it
terminate called after throwing an instance of 'tbb::captured_exception'
what():  basic_string::_M_construct null not valid
Aborted (core dumped)

Я видел, что первый фильтр конвейера читает весь файл, и ошибка появляется в конце файла.

Что я делаю не так?

редактировать: каждая строка файла имеет следующую структуру:
дд-мм-гггг чч: мм: сс.msmsms «CompanyName» ff.ff

где:

  • дд-мм-гггг — дата в форме день-месяц-год
  • чч: мм: сс.212313 — дата в часах, минутах, секундах и миллисекундах
  • «companyName» — это строка
  • ff.ff является двойным

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]