mysql - 批处理文件操作csv并用mysql导入
问题描述
我正在尝试将 a 导入CSV
到mySQL
using Batch script
。导入csv
to的部分可以mysql
工作,但如果csv
文件包含空字段(如苹果、香蕉、猕猴桃),则它不能正常工作。
所以我想要做的是事先操作 csv 文件以便替换,,
为, ,
. 我试图在网上找到一些代码来实现这一点,因为这是我的第一个Batch script
,但它不起作用。
这是我的Batch script
:
@echo off
setlocal enableextensions disabledelayedexpansion
set "search=,,"
set "replace=, ,"
set "textFile=eform.csv"
for /f "delims=" %%i in ('type "%textFile%" ^& break ^> "%textFile%" ') do (
set "line=%%i"
setlocal enabledelayedexpansion
>>"%textFile%" echo(!line:%search%=%replace%!
endlocal
)
@echo on
C:\xampp\mysql\bin\mysqld
C:\xampp\mysql\bin\mysql -u root -p kepdb_db < infile.sql
pause
如果此脚本有效,然后如果 csv 文件包含 3 个连续的空字段 ->apple,,,,banana
那么它将被转换为 ->apple, , , ,banana
或apple, ,, ,banana
??
解决方案
插入行:
set "line=!line:%search%=%replace%!"
就在该行之前:
>>"%textFile%" echo(!line:%search%=%replace%!
由于使用的子字符串替换功能从左到右扫描字符串以进行替换,因此已经处理的字符不会参与进一步的替换。因此,因为第二个已经被前一个替换处理了,所以第三个是独立的,,,
。出于同样的原因变成,依此类推。因此,您必须进行第二次扫描和更换。, ,,
,
,,,,
, ,, ,
请注意,当任何字段值包含,
它们自己的序列时,这可能会产生意想不到的结果(当值被引用时可能会发生这种情况,例如apple,"ora,,nge",,,banana
; 这将被修改为,apple,"ora, ,nge", , ,banana
因为不考虑引用,尽管apple,"ora,,nge", , ,banana
这是正确的)。
推荐阅读
- python - 条件介于两者之间的 Keras 垂直集成模型
- python - 没有numpy的矩阵乘法
- c++ - 浮点值丢失 :: 使用 rapidjson 读取 JSON
- x86 - 将实模式内存访问指令转换为 AT&T 语法
- java - 为什么使用位移而不是 for 循环?
- docker - kubernetes 1.18 和 1.19 支持哪些 docker 版本?
- python - 以小时为单位获取日期时间之间的差异,将两个四舍五入设置为 2
- python - 散列例如字符串的向量以获得散列的一对一sha256向量(Python)
- docker - 如何在使用 Gitlab CI runner 拉取 docker:dind 之前在 Dockerhub 上进行身份验证
- java - JavaFX getStylesheet().add(path) 不允许我从 Maven 项目的根目录读取