最近遇到一个问题,一个.txt文件有上万条数据,需要从文件中查询数据并进行计算。
1、首先的思路是.txt文件转为.json文件
用fileReader 来对数据进行处理
2、处理后得到一个json数组对象,但是不能每次用到的时候都去读取.txt文件,毕竟里面的数据可不少,还是本地生成一个json文件
function trans(){
var _FileData;
var _FileName = "";
// 读取本地文件
var aryData = [];
function readFile(input) {
console.log(input)
$('.condition .add-new').remove();
$("#table").html("");
// chrome IE10
var file = input.files[0];
console.log(file)
_FileName = $("#file").val();
_FileName = _FileName.replace(/^.+?\\([^\\]+?)(\.[^\.\\]*?)?$/gi, "$1"); //正则表达式获取文件名,不带后缀
var reader = new FileReader();
reader.readAsText(file, 'utf-8');
reader.onloadend = function () {
var fileContent = this.result;
var arrLine = fileContent.split("\n");
var arrHead = arrLine[0].split(" ");
var str = "<thead>";
var jsonArrayStr = "";
for (var j = 1; j < arrLine.length; j++) {
var jsonData = {};
console.log(arrLine[j])
var arrItem = arrLine[j].split(" ");
for (var i = 0; i < arrHead.length; i++) {
jsonData[arrHead[i].toString()] = arrItem[i].toString();
}
aryData.push(jsonData)
}
console.log(aryData)
downloadJson(aryData)
}
}
function downloadJson(data) {
var blob = new Blob([JSON.stringify(data)], {
type: ""
});
saveAs(blob, "mat.json");
}
}
(1)上述filesaver.js先引入,方法saveAs()即生存一个文件保存在本地。
(2)生成json文件后,先用$.getJson报错,说跨域了,
再用ajax封装好的get方法,把dataTata写为jsonp,还是报错跨域
(3)最后在网上找到一位兄弟的方法,是用<script>来引入,请求的末尾加了?callback
这个方法注意一下,一定要在json数据的外面包一层callback的函数名
这位兄弟的博文链接:https://blog.csdn.net/jiaoshuaiai/article/details/78417683
3、将提交input的type属性由submit改为button,则required属性不起作用
为了阻止表单的默认提交,input的type属性由submit改为button,但是input type="text"的输入框的required将不再验证