Advertisement
Lusien_Lashans

SberParser

May 7th, 2019
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const { config } = require("./config");
  2. const fs = require("fs");
  3. const fileContent = fs.readFileSync("sber.txt", "utf8");
  4.  
  5. class Deal {
  6.     constructor(INN, client, date, sum) {
  7.         this.INN = INN;
  8.         this.client = client;
  9.         this.date = date;
  10.         this.sum = sum;
  11.     }
  12. }
  13.  
  14. let strArr = get_array(fileContent);
  15. console.log(parse(strArr));
  16.  
  17. function is_substring(str, query) {
  18.     return str.indexOf(query) != -1;
  19. }
  20.  
  21. function get_array(fileContent) {
  22.     function is_not_IP(str) {
  23.         return !(is_substring(str, "Плательщик") && is_substring(get_value_from_str(str), "ИП "))
  24.     }
  25.  
  26.     let strArr = fileContent.split('\n');
  27.  
  28.     let indexStart = 0;
  29.     let indexEnd = 0;
  30.  
  31.     for (let i = 0; i < strArr.length; i++)
  32.     {
  33.         let str = strArr[i];
  34.         if (is_substring(str, "КонецРасчСчет"))
  35.             indexStart = i;
  36.         if (is_substring(str, "КонецФайла"))
  37.             indexEnd = i;
  38.     }
  39.  
  40.     return strArr.slice(indexStart, indexEnd).filter(str => is_not_IP(str));
  41. }
  42.  
  43. //парсим весь документ
  44. function parse(strArr) {
  45.     let dealArr = new Array();
  46.     const splitedArr = split_arr(strArr);
  47.     splitedArr.forEach(array => dealArr.push(parse_one_deal(array)));
  48.    
  49.     return dealArr.filter(x => x != undefined);
  50.  
  51.     //парсим одну сделку
  52.     function parse_one_deal(array) {
  53.         let inn = "";
  54.         let client = "";
  55.         let date = "";
  56.         let sum = 0;
  57.         let flag = true;
  58.         array.forEach(str => {
  59.             if(is_substring(str, "ПлательщикИНН="))
  60.                 inn = get_value_from_str(str);
  61.             if(is_substring(str, "Плательщик="))
  62.                 client = get_value_from_str(str);
  63.             if(is_substring(str, "Дата="))
  64.                 date = get_value_from_str(str);
  65.             if(is_substring(str, "Сумма="))
  66.                 sum = get_value_from_str(str);
  67.         });
  68.         //проверяем содержится ли инн в конфиге
  69.         config.payers.forEach(payer => {
  70.             if (payer == inn) flag = false;
  71.         });
  72.  
  73.         if (flag)
  74.             return new Deal(inn, client, date, sum);
  75.     }
  76. }
  77.  
  78. //получаем строку после знака =
  79. function get_value_from_str(str) {
  80.     return str.split('=')[1];
  81. }
  82.  
  83. function split_arr(strArr) {
  84.     let splitedArr = new Array();
  85.     let start = 0;
  86.     let end = 0;
  87.     let indicator = 0;
  88.     for (let i = 0; i < strArr.length; i++) {
  89.         let str = strArr[i];
  90.         if (is_substring(str, "Номер=")) {
  91.             start = i;
  92.             indicator++;
  93.         }
  94.         if (is_substring(str, "КонецДокумента")) {
  95.             end = i;
  96.             indicator++;
  97.         }
  98.         if (indicator == 2) {
  99.             indicator = 0;
  100.             splitedArr.push(strArr.slice(start, end));
  101.         }
  102.     }
  103.  
  104.     return splitedArr;
  105. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement