Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Есть текстовый файл следующего формата:
- Date;EUR/USD(Open, Ask);EUR/USD(High, Ask);EUR/USD(Low, Ask);EUR/USD(Close, Ask);EUR/USD(Open, Bid)*;EUR/USD(High, Bid)*;EUR/USD(Low, Bid)*;EUR/USD(Close, Bid)*
- 02.07.2016 06:59:00;1,11426;1,11442;1,11426;1,11432;1,11388;1,11388;1,11359;1,11359
- 02.07.2016 06:58:00;1,11393;1,11426;1,11393;1,11426;1,11384;1,11400;1,11382;1,11388
- 02.07.2016 06:57:00;1,11410;1,11414;1,11382;1,11393;1,11392;1,11393;1,11359;1,11384
- Первой строкой идет заголовок, а дальше идут данные: дата и 8 цен.
- Для облегчения анализа колебания цен из обычно группируют по определенному промежутку времени, запоминая какой цена была в начале этого промежутка времени, в конце, а также минимум и максимум до которых цена поднималась/опускалась в течении этого периода времени. Данная группировка обычно называется баром (bar) или свечей (candle). Данные в примере приведены для минутного промежутка времени.
- Примечение: Ask — цена покупки, Bid — цена продажи.
- Задание 1:
- 1.1) Написать класс/структуру для хранения данных для бара: цена в начале промежутка времени, цена в конце промежутка времени, минимум и максимум. Поля класса должны быть не видны внешним классом, получение данных должно быть организовано через методы. Дату хранить в виде строки (std::string);
- 1.2) Написать класс-коллекцию структур/классов написанных в 1.1. У класса должны быть методы получения количества цен в коллекции, и структуры цены по произвольному индексу. Также у этого класса должны быть методы добавления данных в коллекцию.
- Задание 2:
- Написать класс для разбора текстового файла с ценами. Класс должен быть статическим. У класса должен быть метод на вход которого передается имя файла, и в качестве результата долен отдаваться std::vector со структурами из 1.1.
- Детали реализации должны быть следующими:
- 2.1) Файл надо прочитать построчно, положив все прочтенные строки в std::vector<std::string>
- 2.2) Пробежаться по прочтенным строка при помощи итератора в обратном порядке (std::vector<..>::reverse_iterator). Каждую строку распарсить функциями std::string (http://www.cplusplus.com/reference/string/string/find/, http://www.cplusplus.com/reference/string/string/substr/)
- 2.3) Посчитать среднюю цену закрытия (close), пробежавшись по vector при помощи итератора (std::vector<..>::iterator) удалить из него все bar'ы у которых цена закрытия меньше среднего значения.
- Задание 3:
- Вектор цен из задания 2 преобразовать в строку вида:
- 02.07.2016 06:59:00;1,11426;1,11442;1,11426;1,11432;1,11388;1,11388;1,11359;1,11359
- 02.07.2016 06:58:00;1,11393;1,11426;1,11393;1,11426;1,11384;1,11400;1,11382;1,11388
- 02.07.2016 06:57:00;1,11410;1,11414;1,11382;1,11393;1,11392;1,11393;1,11359;1,11384
- Эту строку записать в файл "filtered.csv".
- Для форматирования строки и записи в файл используйте std::ofstream (http://www.cplusplus.com/reference/fstream/ofstream/?kw=ofstream)
- Задание 4:
- Посчитать частоту слов в текстовом файле. Название файла задается через параметры командной строки. Вывести в консоль 20 самых часто встречаемых слов отсортированных по уменьшению частоты.
- Рекомендуется использовать std::map<std::string, int>
- ----------------------------
- #pragma once
- #ifndef BAR_H
- #define BAR_H
- class Bar {
- public:
- float Get_price_max();
- float Get_price_min();
- float Get_price_end();
- float Get_price_start();
- private:
- float price_start;
- float price_end;
- float price_min;
- float price_max;
- //Bar();
- };
- #endif
- ------------------------------
- #include "stdafx.h"
- class Bar{
- public:
- Bar::Bar(std::string Data,float Get_price_max, float Get_price_min, float Get_price_end, float Get_price_start){
- std::string data = Data;
- float max = Get_price_max;
- float min = Get_price_min;
- float end = Get_price_end;
- float start = Get_price_start;
- }
- std::string Get_Data(){ return Data; }
- float Get_price_max(){ return price_max; }
- float Get_price_min(){ return price_min; }
- float Get_price_end(){ return price_end; }
- float Get_price_start(){ return price_start; }
- private:
- Bar();
- float price_start;
- float price_end;
- float price_min;
- float price_max;
- std::string Data;
- };
- --------------------------
- #include "stdafx.h"
- #include "Bar.h"
- using namespace std;
- int main()
- {
- std::vector<Bar> Bars;//Вектор Bar-ов
- std::vector<std::string> v;
- std::vector<std::string> words;//вектор подстрок для одной строки
- setlocale(LC_ALL, "Russian");
- Bar MyBar();
- ifstream fin("sample.csv");
- string line;
- int size;
- if (!fin.is_open()) // если файл не открыт
- cout << "Файл не может быть открыт!"; // сообщить об этом
- else
- {
- while (getline(fin, line))// считываются строки
- {
- // cout << line << endl;//за одно выведем строку
- int line_size=line.size;
- char symb;
- for (int i = 0; i < line_size; i++){
- if(line== symb = line.find(',');
- }
- v.push_back(line);//пихаем строки в вектор
- }
- fin.close();
- size = v.size();
- cout << "кол-во строк:" << size << endl;//смотрим размер всей этой беды
- }
- string::iterator fsign = line.begin;
- string::iterator lsign = line.begin;//парсим строку
- for (int i = 0; i <= size; i++)
- {
- while (fsign != line.end + 1)
- {
- lsign = std::find(line.begin, line.end, ';');
- string word = line.substr(std::distance(fsign, lsign));
- words.push_back(word);
- fsign = lsign + 1;
- }
- }
- /*
- ofstream fout;
- fout.open("filtered.csv");
- if (!fout.is_open()) // если файл небыл открыт
- {
- cout << "Файл не может быть открыт или создан"<<endl; // напечатать соответствующее сообщение
- return 1; // выполнить выход из программы
- }else
- for (int i = 0; i <= size; i++) {
- string newline = v[i];
- fout << newline << endl;//вытаскиваем строки в новый файл
- }
- fout.close();
- */
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement