我试图导入CSV
到mySQL
使用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
是正确的)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句