因为工作中需要用到检查文本文件,想来想去,还是导到access库要简单点; SQL直接导效果不是很好; 若使用schema.ini文件,效果将会很好, 和直接在access中人工导入效果相差无几. 目前发现的区别是导入数据出错时在库中不会出现经常看到的"粘贴错误"那张表.
网上找了半天,没找到类似的类,就自己动手写了个; 共享所有代码; 两个CPP,两个H, 压缩在一个包内, 下载图片后将扩展名改为 rar 即可. 下载地址: http://hi.youkuaiyun.com/attachment/201004/29/0_12725114405igh.gif (下载地址已修正)
TxtSchema.cpp 文件中的CTxtSchema类可生成一个schema.ini文件; 使用CreateSchema方法;
Txt2Mdb.cpp 文件中的CTxt2Mdb类可用于导入文本文件,使用 ImportTxt2MDB 方法;
ImportTxt2MDB方法有两个变体, 一个是导入前根据schema参数自动创建schema.ini; 另一个不管schema,直接导入;
所有类都基于命名空间TFC下面; 不喜欢的可以自己删除之.
使用的是ODBC引擎, 觉得不爽的兄弟可以自己修改成JET引擎. 两种都支持.
下面给出一个简单的例子:(版权lonefox所有)
- void CMy4Dlg::OnOK()
- {
- TFC::CTxtSchema schema;
- TFC::SchemaData sch; //定义schema数据内容;因为是程序完成导入,所以需要这么麻烦, 能手动建文件的话,直接手动整一个就可以了. 都不用这么折腾.
- sch.FirstLineTitle = false;
- sch.FileName = "ZHOUBIAN.TXT";
- sch.Delimiter = TFC::DT_TAB;
- sch.Charset = TFC::CST_OEM;
- sch.FixedWidthCols = false;
- sch.MaxScanRows = 100;
- TFC::TextField* pField = new TFC::TextField; //定义表中的字段和文本文件一对一
- pField->FieldName = "区号";//城市名称
- pField->FieldSize = 255;
- pField->Type = TFC::SDT_ODBC_CHAR;
- sch.FieldsDefined.Add(pField);
- pField = new TFC::TextField;
- pField->FieldName = "城市名称";//城市名称
- pField->FieldSize = 100;
- pField->Type = TFC::SDT_ODBC_CHAR;
- sch.FieldsDefined.Add(pField);
- pField = new TFC::TextField;
- pField->FieldSize = 255;
- pField->Type = TFC::SDT_ODBC_INTEGER;
- sch.FieldsDefined.Add(pField);
- TFC::CTxt2Mdb test;
- if (test.ImportTxt2MDB("c://ZHOUBIAN.TXT", "c://1.mdb", "biaoming", //导入
- sch, true) != RESULT_OK)
- {
- MessageBox("error");
- }
- else
- {
- MessageBox("ok")
- }
- sch.ReleaseAllFields(); //释放字段对象
- }
编写这两个类时,主要参照了两个文档, 推荐浏览:
http://support.microsoft.com/kb/234201 MSDN文章
http://dev.youkuaiyun.com/article/23/23704.shtm 优快云技术中心文章
因为工作繁忙,时间比较紧, 测试不是很充分, 使用请注意风险, 后果自负! 欢迎留言报告bug.
===================================
非注明转载的文章和blog在未特殊声明情况下一般为本人原创或整理,
原创文章版权归沙漠孤狐(lonefox)所有;转载文章版权归原作者所有;
http://blog.youkuaiyun.com/boythl
欢迎转载,但请注明出处,保留作者和版权信息。
===================================