volond1975
8/28/2018 - 4:37 PM

test

test

//
// AlaSQL node.js sample
//
//var data=[];
var filenamekub="kub.csv";
var filenameGrpD="grpD.csv"
var inpSort="";
var inpForest="";
var inpS="";
var inpL=6.5;
var inpD=32;
var UrlKub =  'https://docs.google.com/spreadsheets/d/1GFcLhpfDTPnx_lq0N4wOYe0CuwuI1bCg09ko2ZCxCGo/edit?usp=sharing'
var alasql = require('alasql');
//var Tabletop = import {} from 'tabletop');
//var TabletopMin = require('tabletop.min.js');
var inpS=(inpS=="" && inpS==0) ? "-" :inpS;
console.log(inpS);
var db = new alasql.Database();
var sqlParamCreateTables=[
  {name:"kub",columns:{L:"INT",D:"INT",V:"INT"}},
  {name:"grpD",columns:{Sortim:"STRING",grpForestD:"STRING",Name:"STRING",D_ot:"INT",D_po:"INT",Link:"STRING",Parent:"STRING"}}];
console.log(sqlParamCreateTables[0]);
var z=0;
var colstr='';
for (var i = 0; i < sqlParamCreateTables.length; i++) {
  console.log(sqlParamCreateTables[i]);  
var crt="CREATE TABLE "+sqlParamCreateTables[i].name+ " ";
console.log(crt);
var counter = 0;
for (var key1 in sqlParamCreateTables[i].columns){counter++};
console.log(counter);
for (var key in sqlParamCreateTables[i].columns){
  var w=''; 
  if (z==counter-1)  {
    w=" "+key +" "+ sqlParamCreateTables[i].columns[key];}
      else {
        w=" "+ key + " " + sqlParamCreateTables[i].columns[key]+" ,";
                  } 
var colstr = colstr+w;
z++;
};
z=0;
var SQLstr=crt +"(" +colstr+")";
console.log(SQLstr);
colstr='';
db.exec(SQLstr);
};
//db.exec("CREATE TABLE kub (L INT, D INT, V INT)");

//db.exec("CREATE TABLE grpD (Sort STRING,	grpForestD STRING	,Name STRING,	D_ot INT,	D_po	INT ,Link	STRING ,Parent STRING)");


//Продукция	Порода	Наименование	ДиаметрОт	ДиаметрДо	Ссылка	Родитель
alasql.promise('SELECT * FROM CSV("'+filenamekub+'", {headers:true,separator:";"})')
            .then(function(data){
              //console.log(data); 
         //db.exec("Select * INTO kub FROM ?",[data]); 
        // var dbTable=db.tables.kub; 
         var dbTable=db.tables["kub"];
         dbTable.data =data;
         //db.tables.kub.data =data;

       // Получение обьема         по параметрам  
       var outputV=  Out_V(db,inpL,inpD)
      //  console.log(outputV); 
            }).catch(function(err){
              // Файл отсутствует локально
                 console.log('Error no local file:', err);
             //Попробуем скачать
             var options = {
              key: publicSpreadsheetUrl,
              callback: onLoad,
              simpleSheet: true
            };
            
            Tabletop.init(options);
             //importKub(publicSpreadsheetUrl,filename);
            });
        

        

function importKub(publicSpreadsheetUrl,filename){
  alasql.promise('SELECT * INTO CSV("'+filename+'", {headers:true}) FROM TABLETOP(?)',[UrlKub])
  .then(function(){
      console.log('Data saved');
   }).catch(function(err){
       console.log('Global Error:', err);
   });; 

}

function Out_V(db,inpL,inpD){
  var strSql="SELECT MIN(L) AS L FROM kub WHERE L>="+inpL;
         var res = db.exec(strSql);
         var outL= res.length != 0 ? res[0].L:undefined;
         console.log(outL);
         
         var strSql="SELECT MIN(D) AS D FROM kub WHERE D>="+inpD+" and L="+ outL;
         var res = db.exec(strSql);
         var outD= res.length != 0 ? res[0].D:undefined;
         console.log(outD);
         
         var strSql="SELECT V FROM kub where L="+outL+" and D="+outD;
         var res = db.exec(strSql);
         var outV= res.length != 0 ? res[0].V:undefined;
         //console.log(outV);
         return outV
}
function onLoad(data, tabletop) {
  console.log(data);
};
//db.tables.kub.data =csvtable;
//db.exec("Select * INTO kub FROM ?",[csvtable]);
//db.tables.kub.data = [   // You can mix SQL and JavaScript
 //   {L:3,D:40,V:0.324},
  //  {L:3,D:41,V:0.325},
 //   {L:7,D:40,V:0.725},
 //   {L:7,D:41,V:0.725},
  //  {L:2,D:40,V:0.224},
  //  {L:2,D:41,V:0.225},
  //  {L:5,D:40,V:0.525},
  //  {L:5,D:41,V:0.525},
 //   {L:6,D:41,V:0.625},
//];
//db.tables.kub.data=data;





Array.prototype.unique = function() {
  var nArray = new Array;
  for(i=0;i<=this.length-1;i++) {
  if(!nArray.contains(this[i])) {
  nArray.length+=1;
  nArray[nArray.length-1] = this[i];
  }
  }
  return nArray;
  }
  
  Array.prototype.contains = function(val) {
  for(j=0;j<=this.length-1;j++) {
  if(this[j] == val) return true;
  }
  return false;
  }


var v=[1,1,1,2,2,2,5,7,5,3,10];
//svgData = [
//  {svgX: 1367.844, data...},
//  {svgX: 1684.478, data...},
//  {svgX: 1168.474, data...},
//  {svgX: 1344.854, data...},
  // etc.
//]
var vun=v.unique();
console.log(v.unique());
/**
 * 
 * @param  {Array} data 
 * @param  {integer} target
 * @param  {integer} start
 * @param  {integer} end
 * @param  {} res
 * @return {} Возвращает ближайшее большее значение к target
 */
function binarySearch (data, target, start, end, res)
  {
    console.log('start-'+start + ' ' +'end-'+end); 
  if(end < 1) return data[0];
 var middle = Math.floor((start + (end - start)/2));
 //console.log('middle-'+middle ); 
 //console.log('(data[start] )-'+data[start] ); 
 //console.log('Math.abs(data[start] - target)-'+Math.abs(data[start] - target) );
 //console.log('(data[end] )-'+data[end] ); 
 //console.log('Math.abs(data[end] - target)-'+Math.abs(data[end] - target) );
 //console.log('Math.abs(data[start] - target) > Math.abs(data[end] - target))-'+Math.abs(data[start] - target) > Math.abs(data[end] - target) );
  if (target == data[middle]) return data[middle];
 
  if (end - 1 === start) return Math.abs(data[start] - target) < Math.abs(data[end] - target) ? data[start] : data[end]; 
  
  if (target > data[middle]) return binarySearch(data,target,middle,end);
  if (target < data[middle]) return binarySearch(data,target,start,middle,res);
}
//console.log(vun.sort(function(a, b) {return a - b;}));
var zn=4;
var closestPoint = binarySearch(vun.sort(function(a, b) {return a - b;}),zn, 0, vun.length-1,1);

transpose = matrix => matrix.reduce(($, row) => row.map((_, i) => [...($[i] || []), row[i]]), [])
var trArr=transpose([[0, 1], [2, 3], [4, 5]])


//console.log(trArr[1]); // [[0, 2, 4], [1, 3, 5]]

  
//console.log('Для значения-'+zn ); 
//console.log(closestPoint);