javascript - 从html中上传的csv文件中提取标题
问题描述
我想提取我上传的 csv 文件的标题行并将它们显示为复选框选项。目前,我根据“\n”拆分,然后在“,”上拆分以获取各个列名。但是,它不适用于所有 csv 文件,并且有些文件无法正确拆分(例如,数据单元格作为列标题返回)。有什么我可以使用的功能吗?谢谢!我的代码如下所示。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/css/bootstrap.min.css">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/js/bootstrap.min.js"></script>
<!-- jquery -->
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.7.7/xlsx.core.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/xls/0.7.4-a/xls.core.min.js"></script>
<script type="text/javascript">
/*---CSV FUNCTION---*/
function getColumns_csv() {
var reader = new FileReader();
reader.onload = function(e){
var data = e.target.result;
var header = data.split("\n")[0] //<--- is there a better way to split columns?
header = header.split(",");
var cnt = 1;
$('#columnCheckbox').empty();
header.forEach(function(y){
$('#columnCheckbox').append('<td><input type="checkbox" name='+y+' id="columnSelect'+cnt+'" class="chkbx">'+y+'</td>');
cnt++;
});
$('.chkbx').on('click',function(){
if($('.chkbx:checked').length == $('.chkbx').length){
$('#checkall').prop('checked',true);
}else{
$('#checkall').prop('checked',false);
}
});
$('.hiddeninputs').show();
$('#submission').show();
}
reader.readAsText($('#datafile')[0].files[0]);
}
/*---//CSV FUNCTION---*/
</script>
<script type="text/javascript">
//select all button
$(document).ready(function(){
$('#checkall').on('click',function(){
if(this.checked){
$('.chkbx').each(function(){
this.checked = true;
});
}else{
$('.chkbx').each(function(){
this.checked = false;
});
}
});
});
</script>
</head>
<body>
<div>
<h3>Upload File</h3>
<!-- form to post file -->
<form method="post" enctype="multipart/form-data" id="fileform">
<input type="file" name="datafile" id="datafile">
<button type="button" class="btn btn-info" name="upload" id="upload" onclick="getColumns_csv()">Upload File</button>
<br></br>
<table class="hiddeninputs" hidden="hidden">
<tr>
<td><input type="checkbox" id="checkall">Select all</td>
</tr>
<tr id="columnCheckbox"></tr>
</table>
<br>
<input type="submit" class="btn btn-info" value="submit" id="submission">
</form>
</div>
</body>
</html>
解决方案
试试这个:
var header = data.split(/[\r\n]+/)[0];
如果您的问题与分行有关,这将涵盖更多可能的end of line
字符。
推荐阅读
- embedded - 擦除 TIVA TM4C123 微控制器上的闪存
- crate - CrateDB 创建自定义分析器
- javascript - 获取用户注册日期
- react-native - 有没有一种可能的方法可以在 react-native-router-flux 中使用 react-native-router-flux 制作子标题
- unity-container - 像使用 Unity IoC 一样映射
- angularjs - 尝试检索 JSON 时出现角度错误
- python - 带有 mpi4py 的 Openmpi 不能在多个节点上工作
- javascript - d3.js 使用 Class 和 Attr 为文本添加颜色
- javascript - 将 html 表单发送到 Django 项目中的电子邮件地址的最佳方式?
- image - 尝试在空对象引用上调用接口方法 java.lang.String com.facebook.react.bridge.ReadableMap 等