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);