BULK INSERT时发生错误 异常的EOF,原因是有空行!
或者文本结束时没0x0D0A。
//特别写一个过程来进行处理,找出这些问题。
long ll_rows,i,ll_read_len,ll_linecount,j
string ls_path
long ll_filehandle
blob{10485760} bl
byte bt[10485760]
ll_rows = dw_2.rowcount()
if ll_rows <1 then return
for i = 1 to ll_rows
yield()
if ib_stop then return
dw_2.selectrow(0,false)
dw_2.selectrow(i,true)
ls_path = dw_2.getitemstring(i,6) //filepath
ll_filehandle = FileOpen(ls_path, &
StreamMode!, read!,shared!, append!)
if ll_filehandle < 1 then continue
//先判断文件尾是否是0x0D0A
FileSeek64 (ll_filehandle,-2,FromEnd!)
filereadex(ll_filehandle,bl,2)
if byte(blobmid(bl,1,1)) <> 13 or byte(blobmid(bl,2,1)) <> 10 then
dw_2.setitem(i,2,dw_2.getitemstring(i,2) + "---结尾不为\r\n")
//messagebox("异常","文件:~n" + ls_path + "~n结尾不为\r\n")
fileclose(ll_filehandle)
continue
end if
//判断文件中间是否存在连续的0D0A0D0A这样的空行(跳行),其实严格地说,还有其他不可打印字符(控制字符是否跳行没测试)也可能引起。我遇到的问题就是别人导给我的数据,有一列的汉字被切掉了一半!搞死人了。我叫他先把那一栏加个因为字符,再切掉一个字符(等于切掉半个汉字了),他有不肯定搞,还是他根本不晓得导出的结果会那样。再说几百兆的文件他也不可能逐行去看。所以其他跳行原因请具体分析。
FileSeek64 (ll_filehandle,1,FromBeginning!)
DO while(true)
ll_read_len = filereadex(ll_filehandle,bl,10485760)
bt = GetByteArray(bl)//这里很关键,用blobmid去逐个取字符很慢。
if ll_read_len <4 then exit
ll_read_len -=3
for j = 1 to ll_read_len
yield()
if ib_stop then
fileclose(ll_filehandle)
return
end if
if mod(j,100000) = 0 then
st_odoa.text = "0x0D0A:" + string(ll_linecount)
st_ij.text = "J: " + string(j)
end if
if bt[j]<>13 then continue
if bt[j + 1] = 10 then
ll_linecount ++
else
continue
end if
if bt[j + 2] = 13 and bt[j + 3] = 10 then
dw_2.setitem(i,2,dw_2.getitemstring(i,2) + "---存在空行,在" + string(ll_linecount) + "行处!")
//messagebox("异常","文件:~n" + ls_path +&
//"~n在中间存在空行~n位置: 第:" + string(ll_rowcount) +&
//"行处!",question!,yesno!)
exit
end if
next
FileSeek64 (ll_filehandle,-3,FromCurrent!) //回退
loop
fileclose(ll_filehandle)
next
messagebox("提示","文件检查结束")
分享到:
相关推荐
bulk insert导入数据,可以方便的将大数据量的数据快速导入
SQL SERVER BULK INSERT用法
NULL 博文链接:https://kingschan.iteye.com/blog/1681263
Entity Farmework扩展方法,批量添加(BulkInsert)。
Bulk Insert 批量操作数据库类,使用SqlBulkCopy将DataTable中的数据批量插入数据库中,若源数据集属性与目标表属性字段不一致可额外进行映射
kettle9.1(PDI)连接elasticsearch7.13.2,使用时,直接将原kettle目录下-->plugin-->elasticsearch-bulk-insert-plugin下的文件删除,将该压缩包下的内容解压,放在该目录即可
ETL工具kettle7.1抽取数据目前不支持elasticsearch 2.X以上版本,如果想要支持elasticsearch 6.X以上版本,必须替换elasticsearch-bulk-insert-plugin插件,该资源提供该插件的替换。 具体步骤为在spoon kettle\data-...
Gorm Bulk Insert是一个使用实现批量插入/更新Gorm Bulk Insert的库。 目的 保存批量记录 安装 $ go get github.com/sunary/gorm-bulk-insert 这个库依赖于 gorm,除非你已经安装了 gorm,否则下面的命令也是必要的...
测试数据库速度sql静态预编译bulk insert方法
kettle 支持elasticsearch7.x 批量上传的插件,减压后放到data-integration\plugins 目录下即可
BULK INSERT以用户指定的格式复制一个数据文件至数据库表或视图中。 语法: BULK INSERT [ [ 'database_name'.][ 'owner' ].]{ 'table_name' FROM 'data_file' } WITH ( [ BATCHSIZE [ = batch_size ] ], [ ...
NuGet 有几种可用的NuGet软件包: EntityFramework6.BulkInsert EntityFramework6.BulkInsert.SqlServerCe EntityFramework6.BulkInsert.MySql目的该库的目的是使用EntityFramework 6和您现有的DbContext实例执行...
Gorm Bulk Insert是一个使用实现批量插入的库。 只需传递一片结构即可执行批量插入,就像您定期使用gorm一样。 目的 当在数据库中保存大量记录时,一次插入-而不是一个接一个地插入-可以显着提高性能。 这被广泛称为...
上午在找Bulk Insert的资料看,还转了一篇。不巧今天下午就用上了,我遇到的需求是导出表A中的N个字段,然后导入到表B的N个字段当中。
kettle7.1+elasticsearch7.0.1版本,此包通过pentaho-kettle-8.2.0.4-R源码编译,可用于elasticsearch7.0.1版本,解压此包,放入在kettle的plugin中,重启kettle即可,在配置项中设置address:的id>,port:9200
使用BULK INSERT大批量导入数据 SQLSERVER,需要的朋友可以参考下。