Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用未定义的HTML5 FileReader填充的Javascript多维数组(但仅在首次使用时!)_Javascript_Arrays_Html_Multidimensional Array - Fatal编程技术网

使用未定义的HTML5 FileReader填充的Javascript多维数组(但仅在首次使用时!)

使用未定义的HTML5 FileReader填充的Javascript多维数组(但仅在首次使用时!),javascript,arrays,html,multidimensional-array,Javascript,Arrays,Html,Multidimensional Array,我有一个全局数组,由四个其他数组组成: var enthalpyVariables = [[],[],[],[]]; 我正在用csv文件中的值填充它: function readTable() { if (window.File && window.FileReader && window.FileList && window.Blob) { // window.alert("OK

我有一个全局数组,由四个其他数组组成:

var enthalpyVariables = [[],[],[],[]];
我正在用csv文件中的值填充它:

function readTable()
    {

        if (window.File && window.FileReader && window.FileList && window.Blob)
        {
            // window.alert("OK");
            var filelist = document.getElementById("TextFile");

            var fileToRead = filelist.files[0];

            var myFileReader = new FileReader();

            myFileReader.onload = function (e)
            {   
                // Create an array consisting of the lines in the file
                var contents = myFileReader.result.split('\r\n');

                // Create an array to store the comma-separated values of
                // the 'current' line
                var currentLine = [];

                enthalpyVariables = [];
                var valueToPush = [];

                var i = 2;
                while (i < contents.length)
                {   
                    currentLine = contents[i].split(',');
                    valueToPush = [];
                    // prepare to push temp
                    valueToPush[0] = parseFloat(currentLine[0]);
                    // prepare to push pressure
                    valueToPush[1] = parseFloat(currentLine[1]);
                    // prepare to push hf
                    valueToPush[2] = parseFloat(currentLine[6]);
                    // prepare to push hg
                    valueToPush[3] = parseFloat(currentLine[8]);

                    enthalpyVariables.push(valueToPush);

                    i++;
                }

            };

            myFileReader.readAsText(fileToRead);
        }
        else
        {
            window.alert("Not supported");
            return;
        }

    }
我有一个按钮执行以下操作:

function main()
        {

            enthalpyVariables = [[],[],[],[]]
            readTable();

            var unvalidatedTemp = 27; // document.getElementById("tempInput").value;
            var unvalidatedPressure = 4; // document.getElementById("pressureInput").value;

            calcPressure(unvalidatedTemp);
            //validateInput(unvalidatedTemp, unvalidatedPressure);
        }

它工作得很好。。。我第二次点击它。我第一次单击它时,什么也没有发生,控制台声明焓变量未定义。如果我再次单击它,它会计算插值压力的预期值(与27相关的压力在表中没有明确显示,但压力应插值为0.003602,例如)。最奇怪的是,如果我在调试器中逐步使用它,焓变量确实会被定义,并且永远不会抛出此错误!我已经在FireFox和Chrome上试过了,结果是一样的。为什么初始运行执行时未定义焓变量

调用calcPressure后读取文件,在读取文件后传入回调以调用,如下所示

function main()
    {
        enthalpyVariables = [[],[],[],[]]
        readTable(function(){

            var unvalidatedTemp = 27; // document.getElementById("tempInput").value;
            var unvalidatedPressure = 4; // document.getElementById("pressureInput").value;

            calcPressure(unvalidatedTemp);
            //validateInput(unvalidatedTemp, unvalidatedPressure);

        });
    }


function readTable(callback)
{

    if (window.File && window.FileReader && window.FileList && window.Blob)
    {
        // window.alert("OK");
        var filelist = document.getElementById("TextFile");

        var fileToRead = filelist.files[0];

        var myFileReader = new FileReader();

        myFileReader.onload = function (e)
        {   
            // Create an array consisting of the lines in the file
            var contents = myFileReader.result.split('\r\n');

            // Create an array to store the comma-separated values of
            // the 'current' line
            var currentLine = [];

            enthalpyVariables = [];
            var valueToPush = [];

            var i = 2;
            while (i < contents.length)
            {   
                currentLine = contents[i].split(',');
                valueToPush = [];
                // prepare to push temp
                valueToPush[0] = parseFloat(currentLine[0]);
                // prepare to push pressure
                valueToPush[1] = parseFloat(currentLine[1]);
                // prepare to push hf
                valueToPush[2] = parseFloat(currentLine[6]);
                // prepare to push hg
                valueToPush[3] = parseFloat(currentLine[8]);

                enthalpyVariables.push(valueToPush);

                i++;
            }
            callback();

        };

        myFileReader.readAsText(fileToRead);
    }
    else
    {
        window.alert("Not supported");
        return;
    }

}
函数main()
{
焓变量=[]、[]、[]、[]、[]
可读性(函数(){
var unvalidatedTemp=27;//document.getElementById(“tempInput”).value;
var unvalidatedPressure=4;//document.getElementById(“pressureInput”).value;
calcPressure(未经验证的温度);
//验证输入(未验证的温度、未验证的压力);
});
}
函数可读表(回调)
{
if(window.File&&window.FileReader&&window.FileList&&window.Blob)
{
//窗口警报(“正常”);
var filelist=document.getElementById(“TextFile”);
var fileToRead=filelist.files[0];
var myFileReader=newfilereader();
myFileReader.onload=函数(e)
{   
//创建一个由文件中的行组成的数组
var contents=myFileReader.result.split('\r\n');
//创建一个数组来存储
//“当前”行
var currentLine=[];
焓变量=[];
var valueToPush=[];
var i=2;
而(i
readTable是基于事件的(myFileReader.onload),因此在第一次读取时会填充数据,但在调用calcPressure之前不会读取文件
function main()
    {
        enthalpyVariables = [[],[],[],[]]
        readTable(function(){

            var unvalidatedTemp = 27; // document.getElementById("tempInput").value;
            var unvalidatedPressure = 4; // document.getElementById("pressureInput").value;

            calcPressure(unvalidatedTemp);
            //validateInput(unvalidatedTemp, unvalidatedPressure);

        });
    }


function readTable(callback)
{

    if (window.File && window.FileReader && window.FileList && window.Blob)
    {
        // window.alert("OK");
        var filelist = document.getElementById("TextFile");

        var fileToRead = filelist.files[0];

        var myFileReader = new FileReader();

        myFileReader.onload = function (e)
        {   
            // Create an array consisting of the lines in the file
            var contents = myFileReader.result.split('\r\n');

            // Create an array to store the comma-separated values of
            // the 'current' line
            var currentLine = [];

            enthalpyVariables = [];
            var valueToPush = [];

            var i = 2;
            while (i < contents.length)
            {   
                currentLine = contents[i].split(',');
                valueToPush = [];
                // prepare to push temp
                valueToPush[0] = parseFloat(currentLine[0]);
                // prepare to push pressure
                valueToPush[1] = parseFloat(currentLine[1]);
                // prepare to push hf
                valueToPush[2] = parseFloat(currentLine[6]);
                // prepare to push hg
                valueToPush[3] = parseFloat(currentLine[8]);

                enthalpyVariables.push(valueToPush);

                i++;
            }
            callback();

        };

        myFileReader.readAsText(fileToRead);
    }
    else
    {
        window.alert("Not supported");
        return;
    }

}