Advertisement
TShiva

Untitled

Jul 4th, 2016
227
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.69 KB | None | 0 0
  1.  
  2. Есть текстовый файл следующего формата:
  3. 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)*
  4. 02.07.2016 06:59:00;1,11426;1,11442;1,11426;1,11432;1,11388;1,11388;1,11359;1,11359
  5. 02.07.2016 06:58:00;1,11393;1,11426;1,11393;1,11426;1,11384;1,11400;1,11382;1,11388
  6. 02.07.2016 06:57:00;1,11410;1,11414;1,11382;1,11393;1,11392;1,11393;1,11359;1,11384
  7.  
  8. Первой строкой идет заголовок, а дальше идут данные: дата и 8 цен.
  9.  
  10. Для облегчения анализа колебания цен из обычно группируют по определенному промежутку времени, запоминая какой цена была в начале этого промежутка времени, в конце, а также минимум и максимум до которых цена поднималась/опускалась в течении этого периода времени. Данная группировка обычно называется баром (bar) или свечей (candle). Данные в примере приведены для минутного промежутка времени.
  11. Примечение: Ask — цена покупки, Bid — цена продажи.
  12.  
  13. Задание 1:
  14.     1.1) Написать класс/структуру для хранения данных для бара: цена в начале промежутка времени, цена в конце промежутка времени, минимум и максимум. Поля класса должны быть не видны внешним классом, получение данных должно быть организовано через методы. Дату хранить в виде строки (std::string);
  15.     1.2) Написать класс-коллекцию структур/классов написанных в 1.1. У класса должны быть методы получения количества цен в коллекции, и структуры цены по произвольному индексу. Также у этого класса должны быть методы добавления данных в коллекцию.
  16.  
  17. Задание 2:
  18.     Написать класс для разбора текстового файла с ценами. Класс должен быть статическим. У класса должен быть метод на вход которого передается имя файла, и в качестве результата долен отдаваться std::vector со структурами из 1.1.
  19.     Детали реализации должны быть следующими:
  20.     2.1) Файл надо прочитать построчно, положив все прочтенные строки в std::vector<std::string>
  21.     2.2) Пробежаться по прочтенным строка при помощи итератора в обратном порядке (std::vector<..>::reverse_iterator). Каждую строку распарсить функциями std::string (http://www.cplusplus.com/reference/string/string/find/, http://www.cplusplus.com/reference/string/string/substr/)
  22.     2.3) Посчитать среднюю цену закрытия (close), пробежавшись по vector при помощи итератора (std::vector<..>::iterator) удалить из него все bar'ы у которых цена закрытия меньше среднего значения.
  23.  
  24. Задание 3:
  25.     Вектор цен из задания 2 преобразовать в строку вида:
  26. 02.07.2016 06:59:00;1,11426;1,11442;1,11426;1,11432;1,11388;1,11388;1,11359;1,11359
  27. 02.07.2016 06:58:00;1,11393;1,11426;1,11393;1,11426;1,11384;1,11400;1,11382;1,11388
  28. 02.07.2016 06:57:00;1,11410;1,11414;1,11382;1,11393;1,11392;1,11393;1,11359;1,11384
  29.     Эту строку записать в файл "filtered.csv".
  30.     Для форматирования строки и записи в файл используйте std::ofstream (http://www.cplusplus.com/reference/fstream/ofstream/?kw=ofstream)
  31.  
  32. Задание 4:
  33.     Посчитать частоту слов в текстовом файле. Название файла задается через параметры командной строки. Вывести в консоль 20 самых часто встречаемых слов отсортированных по уменьшению частоты.
  34.     Рекомендуется использовать std::map<std::string, int>
  35.  
  36.  
  37. ----------------------------
  38.  
  39. #pragma once
  40. #ifndef BAR_H
  41. #define BAR_H
  42. class Bar {
  43. public:
  44.     float Get_price_max();
  45.     float Get_price_min();
  46.     float Get_price_end();
  47.     float Get_price_start();
  48. private:
  49.     float price_start;
  50.     float price_end;
  51.     float price_min;
  52.     float price_max;
  53.     //Bar();
  54.  
  55. };
  56.  
  57.    
  58. #endif
  59.  
  60. ------------------------------
  61.  
  62.  
  63. #include "stdafx.h"
  64.  
  65.  
  66. class Bar{
  67. public:
  68.      Bar::Bar(std::string Data,float Get_price_max, float Get_price_min, float Get_price_end, float Get_price_start){
  69.          std::string data = Data;
  70.          float max = Get_price_max;
  71.          float min = Get_price_min;
  72.          float end = Get_price_end;
  73.          float start = Get_price_start;
  74.     }
  75.  
  76.  
  77.      std::string Get_Data(){ return Data; }
  78.      float Get_price_max(){ return price_max; }
  79.      float Get_price_min(){ return price_min; }
  80.      float Get_price_end(){ return price_end; }
  81.      float Get_price_start(){ return price_start; }
  82.  
  83.      
  84. private:
  85.  
  86.     Bar();
  87.     float price_start;
  88.     float price_end;
  89.     float price_min;
  90.     float price_max;
  91.  
  92.     std::string Data;
  93. };
  94.  
  95. --------------------------
  96.  
  97. #include "stdafx.h"
  98. #include "Bar.h"
  99.  
  100. using namespace std;
  101.  
  102.  
  103. int main()
  104. {
  105.     std::vector<Bar> Bars;//Вектор Bar-ов
  106.     std::vector<std::string> v;
  107.     std::vector<std::string> words;//вектор подстрок для одной строки
  108.     setlocale(LC_ALL, "Russian");
  109.     Bar MyBar();
  110.     ifstream fin("sample.csv");
  111.     string line;
  112.     int size;
  113.     if (!fin.is_open()) // если файл не открыт
  114.         cout << "Файл не может быть открыт!"; // сообщить об этом
  115.     else
  116.         {
  117.         while (getline(fin, line))// считываются строки
  118.         {  
  119.     //      cout << line << endl;//за одно выведем строку
  120.             int line_size=line.size;
  121.             char symb;
  122.             for (int i = 0; i < line_size; i++){
  123.                 if(line== symb = line.find(',');
  124.  
  125.             }
  126.             v.push_back(line);//пихаем строки в вектор
  127.                 }
  128.         fin.close();
  129.  
  130.  
  131.         size = v.size();
  132.         cout << "кол-во строк:" << size << endl;//смотрим размер всей этой беды
  133.     }
  134.  
  135.  
  136.     string::iterator fsign = line.begin;
  137.     string::iterator lsign = line.begin;//парсим строку
  138.  
  139.     for (int i = 0; i <= size; i++)
  140.     {
  141.         while (fsign != line.end + 1)
  142.         {
  143.             lsign = std::find(line.begin, line.end, ';');
  144.             string word = line.substr(std::distance(fsign, lsign));
  145.             words.push_back(word);
  146.             fsign = lsign + 1;
  147.         }
  148.     }
  149.  
  150.    
  151.     /*
  152.  
  153.     ofstream fout;
  154.     fout.open("filtered.csv");
  155.     if (!fout.is_open()) // если файл небыл открыт
  156.     {
  157.         cout << "Файл не может быть открыт или создан"<<endl; // напечатать соответствующее сообщение
  158.         return 1; // выполнить выход из программы
  159.     }else
  160.     for (int i = 0; i <= size; i++) {
  161.         string newline = v[i];
  162.         fout << newline << endl;//вытаскиваем строки в новый файл
  163.         }
  164.     fout.close();
  165.     */
  166.     system("pause");
  167.     return 0;
  168. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement