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("提示","文件检查结束")
分享到:
相关推荐
在SQL Server中,`BULK INSERT`命令是一个非常实用的功能,用于从外部数据源,如文本文件或CSV文件,快速大量地导入数据到数据库表中。这个操作比使用INSERT语句逐行插入数据快得多,尤其在处理大量数据时。在本篇中...
在处理大量数据插入时,传统的逐条插入方式可能会导致性能低下,此时我们可以利用扩展方法来实现批量插入(BulkInsert),以提高数据插入效率。本文将详细讲解如何在EF中使用BulkInsert扩展方法,以及其背后的原理和...
"SQL SERVER BULK INSERT用法" BULK INSERT 是 SQL Server 中的一种 BulkCopy 功能,允许用户快速将大量数据从文本文件或其他数据源导入到数据库表或视图中。下面是 BULK INSERT 的详细用法和参数解释: 基本语法 ...
- **高效性**:相比传统的 INSERT 语句,`BULK INSERT` 能够显著提高导入速度,特别是在处理大量数据时。 - **批量操作**:一次命令即可完成大批量数据的导入工作。 - **灵活性**:支持多种文件格式(如 CSV、TXT...
在SQL Server中,Bulk Insert是一个非常实用的工具,用于快速大量地将数据导入数据库表。在标题"sql.rar_Bulk Insert"中,...在进行Bulk Insert操作时,需要合理规划数据格式、处理错误、优化性能,并确保数据安全。
Elasticsearch-Bulk-Insert-Plugin 是一个专为Kettle设计的插件,主要用于高效地将大量数据批量插入到Elasticsearch(ES)集群中。Elasticsearch是一种流行且功能强大的分布式搜索引擎,常用于大数据分析、日志分析...
在.NET框架中,当需要高效地将大量数据从一个数据源(如DataTable)批量导入到SQL Server数据库时,我们可以利用`SqlBulkCopy`类。这个类提供了快速且高效的批量插入功能,大大提升了数据迁移的效率,尤其对于大数据...
- 错误处理机制,允许在遇到错误时继续处理其他数据,或者提供详细的错误报告。 - 可配置的参数,如批处理大小、重试策略、超时设置等,以适应不同场景的需求。 安装和使用该插件通常涉及以下步骤: 1. 解压下载的...
Gorm Bulk Insert是一个使用实现批量插入/更新Gorm Bulk Insert的库。 目的 保存批量记录 安装 $ go get github.com/sunary/gorm-bulk-insert 这个库依赖于 gorm,除非你已经安装了 gorm,否则下面的命令也是必要的...
Gorm Bulk Insert是一个使用实现批量插入的库。 只需传递一片结构即可执行批量插入,就像您定期使用gorm一样。 目的 当在数据库中保存大量记录时,一次插入-而不是一个接一个地插入-可以显着提高性能。 这被广泛称为...
kettle 支持elasticsearch7.x 批量上传的插件,减压后放到data-integration\plugins 目录下即可
NuGet 有几种可用的NuGet软件包: EntityFramework6.BulkInsert EntityFramework6.BulkInsert.SqlServerCe EntityFramework6.BulkInsert.MySql目的该库的目的是使用EntityFramework 6和您现有的DbContext实例执行...
BULK INSERT以用户指定的格式复制一个数据文件至数据库表或视图中。 语法: BULK INSERT [ [ 'database_name'.][ 'owner' ].]{ 'table_name' FROM 'data_file' } WITH ( [ BATCHSIZE [ = batch_size ] ], [ ...
- **保留标识值**:如果表中有标识字段,在使用`BULK INSERT`时,可以选择保留标识值,而不是让SQL Server自动为每个新行生成新的标识值。 - **空值处理**:可以指定如何处理空值。默认情况下,如果源文件中的字段为...
本教程将详细介绍如何实现这个过程,并利用提供的`insert.py`、`create_table.sh`和`insert_url.sh`三个文件来辅助讲解。 首先,我们需要创建一个表来存储数据。`create_table.sh`脚本很可能是用来创建数据库表结构...