我正在尝试构建一个执行以下操作(简化)的应用程序:
我遇到了第4步。有没有一种方法可以扫描数据元素数组并确定数据类型应该是什么?
我看过Papa Parse和csv-parse,但是我都不需要。 Papa Parse虽然很接近,但是它会分别转换每个数组元素,并且不会提取日期。
答案 0 :(得分:0)
即使您运行了完整文件扫描,也很难猜测出确切的类型。
另一个问题是处理输入文件中的错误,例如,列中的数字,应将其存储为日期。
进一步:保险号(或帐号)是一个数字,但在数据库中应存储为字符串。
我建议您直接从大数据分析中获取一种方法。
分三个阶段运行整个过程:首先创建一个中间表,其中每个列的类型均为Text
,然后使用mysq将数据导入其中:LOAD DATA INFILE ...
根据用户的先前选择,列名,内容分析进行初步分析,并为用户显示表格的“向导”。 (或跳过显示向导)
分析应包括最短,最长,平均和最常见长度的计算(例如,前100行包含长字符串,错误消息为:Some date for some proces isn't provided
,其他为有效日期);各种价值(性别,国家,其他“字典”价值);随机内容分析(检测日期和数字)
最后,您可以使用INSERT INTO ... SELECT
,更改列类型(不要忘记允许NULL
来避免转换错误)或逐行进行转换和过滤操作。
//编辑
嗯,我以为您的文件有几个GB。在内存中加载大文件没有意义。
当然,您可以使用库来读取CSV并在内存中进行分析,而不是使用MySQL中的临时表进行分析。但是无论如何,您都不会避免内容分析。没有什么可隐藏的-没有高级AI系统的自动分析平均可以正常工作。
如果您发现某些东西甚至可以检测数据类型,则可以在此基础上进行构建。我也可以成为tablesorter parsers。
答案 1 :(得分:0)
如果您仍在寻找答案,我会推荐npm csv解析器软件包,例如const parse = require('csv-parse')
,这很简单,首先您必须获取csv文件数据并通过csv解析器功能对其进行解析,然后循环遍历您的数据并将其放在对象中以在sql查询中使用。.