Помогите прочитать файл и записать его в переменную

302
17 марта 2018, 16:52

Пишу приложение с использованием D3. Оно должно строить графики из форм ввода на станице и из файла. С последним у меня проблемы, не могу никак прочитать файл и записать его в переменную. Суть проблемы в том что для чтения использую функцию и значение хранятся в ней, а переменную необходимо будет передавать другим функциям. Прошу помощи. Был Конечно вариант вызова функций из функции чтения но по какой-то причине d3 выдает ошибку.

Благодарю за внимание.

Код моей программы.

//Добавления строки таблицы
$('.btn').click(function () {
var ind = $('tr:last').index();
$('.hide').clone().appendTo('table').addClass('row').removeClass('hide');
$('tr:last>td:nth-child(2)>input').addClass('x');
$('tr:last>td:nth-child(3)>input').addClass('y');
$('tr:last>td:first').text(ind);
});
var rawData = [];
var z = 0;
var height = 500, 
width = 500, 
margin=30,
data=[];
var numb;
//функция построения графика
var chart1 = function () {
// создание объекта svg
var svg = d3.select("body").append("svg")
    .attr("class", "axis")
    .attr("width", width)
    .attr("height", height);
// функция, создающая по массиву точек линии
var line = d3.svg.line()
    .x(function(d){return d.x;})
    .y(function(d){return d.y;});
// добавляем путь
svg.append("g").append("path")
.attr("d", line(data))
.style("stroke", "steelblue")
.style("stroke-width", 2);
}
//функция построения сетки координат
var osi = function () {
// создание объекта svg
var svg = d3.select("body").append("svg")
    .attr("class", "axis")
    .attr("width", width + 10)
    .attr("height", height + 10);
// длина оси X= ширина контейнера svg - отступ слева и справа
var xAxisLength = width - 2 * margin;     
// длина оси Y = высота контейнера svg - отступ сверху и снизу
var yAxisLength = height - 2 * margin;
// функция интерполяции значений на ось Х  
var scaleX = d3.scale.linear()
    .domain([0, numb])
    .range([0, xAxisLength]);
// функция интерполяции значений на ось Y
var scaleY = d3.scale.linear()
    .domain([numb, 0])
    .range([0, yAxisLength]);
// масштабирование реальных данных в данные для нашей координатной системы
for(i=0; i<rawData.length; i++)
    data.push({x: scaleX(rawData[i].x)+margin, y: scaleY(rawData[i].y) + margin});
    // создаем ось X   
var xAxis = d3.svg.axis()
    .scale(scaleX)
    .orient("bottom");
// создаем ось Y             
var yAxis = d3.svg.axis()
    .scale(scaleY)
    .orient("left");
for(i=0; i<rawData.length; i++)
    data.push({x: scaleX(rawData[i].x)+margin, y: scaleY(rawData[i].y) + margin});

// отрисовка оси Х             
svg.append("g")       
    .attr("class", "x-axis")
    .attr("transform",  // сдвиг оси вниз и вправо
    "translate(" + margin + "," + (height - margin) + ")")
    .call(xAxis);
// отрисовка оси Y 
svg.append("g")       
    .attr("class", "y-axis")
    .attr("transform", // сдвиг оси вниз и вправо на margin
        "translate(" + margin + "," + margin + ")")
    .call(yAxis);
// создаем набор вертикальных линий для сетки   
d3.selectAll("g.x-axis g.tick")
    .append("line")
    .classed("grid-line", true)
    .attr("x1", 0)
    .attr("y1", 0)
    .attr("x2", 0)
    .attr("y2", - (yAxisLength));
// рисуем горизонтальные линии координатной сетки
d3.selectAll("g.y-axis g.tick")
    .append("line")
    .classed("grid-line", true)
    .attr("x1", 0)
    .attr("y1", 0)
    .attr("x2", xAxisLength)
    .attr("y2", 0);
}
//функция которая читает значение переменных и записывает из в масив. 
//[{x: 1, y: 2} ,{x: 3, y: 4} ,{x: 5, y: 6} ,{x: 7, y: 8},{x: 9, y: 10}] так должен выглядеть масив чтобы D3 его могла прочитать.
function inputToMass() {
var inpx = $('.x');
var inpy = $('.y');
var x, y;
var massx = [];
var massy = [];
var mass = {};
var cur = 0;
for (i = 0; i < inpx.length; i++) {
    mass = {};
    x = inpx[i].value;
    x = parseInt(x);
    mass.x = x;
    y = inpy[i].value;
    y = parseInt(y);
    mass.y = y;
    rawData[i] = mass;
}
for (i = 0; inpx.length > i; i++) {
    x = inpx[i].value;
    x = parseInt(x);
    massx[i] = x;
    y = inpy[i].value;
    y = parseInt(y);
    massy[i] = y;
}
for (var i = 0; i < massx.length; i++) {
    if (cur < massx[i]) {
        cur = massx[i];
    }
    if (cur < massy[i]) {
        cur = massy[i];
    }
}
var ax = cur/100*7;
numb = cur + ax;
}
// общая функция которая при нажатии на кнопку вызывает остальные функции

$('.btn2').click(function () {
$('svg').remove();
inputToMass();
osi();
chart1()
console.log(rawData);
});
// функция чтения из файла
$('.file').change(function () {
var fr = new FileReader();
fr.onload = function(info) {
var rezf = info.target.result;
rawData = rezf;
return rezf;
}
fr.readAsText(this.files[0]);
});

Код ошибки D3

d3.v3.min.js:1 Error: <path> attribute d: Expected number, "MNaN,NaNLNaN,NaNL…".

HTML код

    <div class="table">
    <table border="1">
        <tr>
            <th>#</th>
            <th>X</th>
            <th>Y</th>
        </tr>
        <tr class="hide">
            <td></td>
            <td><input type="number"></td>
            <td><input type="number"></td>
        </tr>
        <tr class="row">
            <td>1</td>
            <td><input class="x" type="number"></td>
            <td><input class="y" type="number"></td>
        </tr>
    </table>
</div>
<br><br>
    <button class="btn">Add Row</button>
    <button class="btn2">generate</button>
    <input class="file" type="file">
    <pre class="cont"></pre>
READ ALSO
Определить почему 1 запрос делает лишним

Определить почему 1 запрос делает лишним

Не могу определить почему при отправке формы делается 2 запроса, если со второго раза отправляешь ту же форму, то получатся идет по одному...

226
Как определить что зажат ctrl при focusin?

Как определить что зажат ctrl при focusin?

Вот этот код не работает

253
Jquery не работает, где ошибка?

Jquery не работает, где ошибка?

Пытаюсь создать тестовый проект с использованием этой библиотеки, не работает в принципе, вот код индекса и скрипта:

287