使用未定义的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;
}
}