求教了,怎么用程序把一个文本文件拆分成对应的列的记录再存进数据库的表里????

部门 人员 工资 合同 年限 学历
办公室 张三 1000 1 2 大专
财政部 李四 2000 5 6 本科
广电总局 王五 5000 3 9 硕士
必须要用程序来实现,文本文件是从数据库里读出来的,很多记录,要删除完现有的记录再把文本文件按列拆分了,添加到对应的数据库表中.怎么得到每列的每个字段呢?晕了.
FREQ STRT STOP CIRAF ZONES LOC POWR AZIMUTH SLW ANT DAYS FDATE TDATE MOD AFRQ LANGUAGE ADM BRC FMO REQ# OLD ALT1 ALT2 ALT3 NOTES
2310 0830 2130 55,58,59 ALI 50 0 0 700 1234567 301005 260306 D AUS ABC BFM 591
2325 0830 2130 55,58,59 TEN 50 0 0 700 1234567 301005 260306 D AUS ABC BFM 592
2485 0830 2130 55,58,59 KTH 50 0 0 700 1234567 301005 260306 D AUS ABC BFM 593
用程序来实现啊大哥,而且里面不知道是空格还是TABLE,其中有些空格要当做NULL来保存,有的是空格.文本格式不规则.
谢谢这位前辈的指教,我用的是oracel数据库,关键是那文件不是我们导出来的,我都看着乱七八糟的,格式也很不规则,去除空格和替换空格都不行,不知道怎么解析了,郁闷死了啊.

你这个问题是一个经典的导入导出问题,已经有很多成熟的解决方案,因此是一个很容易解决的问题。
但是你的问题有一个地方不太清晰,就是你的数据从什么数据库导出,需要导入到什么数据库;因为不同的数据库产品,最优的解决方案不尽相同。
以下我将导出、导入的方法都说出来,虽然你的问题中似乎只涉及导入的疑难,但我的导出方法,作为参考,亦可也,呵呵。

如果你用的是Oracle,最好使用Oracle自带的spool进行导出;使用Oracle自带的sqlldr进行导入,速度奇快,你试试就知道了。(建议google一下sqlldr的使用手册,有很多加速度技巧,比如direct参数等)

如果你用的是MS SQL Server,则最好使用SQL Server自带的bcp进行导出;使用SQL Server自带的DTS进行导入,速度尚可,不过比起sqlldr的电光火速,差远了。

另外,SQL Server的DTS是一个通用的导入导出方案,该工具设计之初就是用于此目的的,它通过ODBC连接数据源,因此可以兼容任何数据库。

最后,我注意到你的问题补充中涉及你们导出数据中''、NULL、TAB的区分问题,我认为这是因为你们导出数据时没有想清楚应该如何区分字段。

业界流行的做法是用TAB字符进行不同字段的区分,它唯一的问题是万一某个字段中存在TAB字符会引发混乱,不过这是一个无法避免的问题。我的意思是说,无论你用哪个字符做区分,你都会面临万一某个字段存在该字符的混乱问题,业界之所以流行用TAB字符进行字段分隔,是因为一般来说,字段中出现含TAB字符的情况比较罕见。

基于“罕见”这个思路,因此对于这个问题的一种常用应对办法是:采用一个及其罕见的字符(或者字符组合也可以),确保没有一个值域会出现同样的字符(或者字符组合),比如,采用一些不可见的ASCII字符用于字段区分,又或者,采用||、!!等这样的稀奇古怪的字符组合用于字段区分。

无论采用哪种字符(或者字符组合)进行字段区分,你都必须在你的数据导出程序中进行配置、变更后才生效,这一点你必须注意。

希望我的回答能够对你产生帮助。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-04-07
你这个文件大不大嘛?

不大的话,记事本打开、全选、复制,打开EXCEL粘贴,选择菜单数据里面的分列,然后你就可以按列进行操作了。

实在要写程序呀,那你喜欢用哪种语言呢,我建议你用PHP嘛,写这样的程序不超过50行。只是你现在的“拆分成对应的列的记录再存进数据库”这句话我不理解。
第2个回答  2008-04-08
直接导入就可以
用空格做分隔符
相似回答
大家正在搜