回 帖 发 新 帖 刷新版面

主题:[讨论]求助高手关于对TXT文件中指定的列读取操作的问题

各位老师:

我是学VB的,由于要处理TXT文件相当大(约为80万行,300列左右),用VB处理起来相当慢,所以求助C友高手解决此问题,谢谢!!
问题是这样的:

有一个以分号分隔TXT文件,想通过对指定的列输入相应的数进行查找,如果某行指定的列和输入的数一致,那么将该行全部读取放到一个新的TXT文当中,文件格式不变;

一个以分号分隔的TXT文件,当运行程序能达到的目的是:
1、对指定的第5列进行查找(以分号为列)
2、提示你从键盘输入对指定的列想要查到的数.
3、如果某行指定的第5列输入的数和TXT文件中的列的值相同,则将此行读取另存到新的TXT文件中.
...
将整个文件中所有的符合条件的行全部放到新的TXT中去.
------------------------------------------------------
例如:TXT文档的格式如下:

date:20110426
12;456575505;435522;96140;3;f5e6498d;13352470030;
12;456575635;435572;92150;6;cfed98ff;18904020456;
12;456584519;436262;92880;3;f5e64981;13309831485;
12;456584635;436305;89580;6;f5e64992;13342451649;
12;456591701;436593;115570;3;f5e6498d;13352470030;
12;456591826;436622;113700;6;cfed98ff;18904020456;
12;456598043;437300;94090;3;f5e64981;13309831485;
12;456598191;437354;89740;6;f5e64992;13342451649;
12;456606115;437860;99840;3;f5e6498d;13352470030;
12;456606270;437901;96840;6;cfed98ff;18904020456;
12;456611796;438352;94010;3;f5e64981;13309831485;
12;456611926;438404;89740;6;f5e64992;13342451649;
当运行程序时有如下的提示:
*要操作的第5列(以分号为列)
*想要查找该列的数是多少:如3
*将第5列为3的所有行全部提取放到新的TXT文档中。

回复列表 (共12个回复)

沙发

想要加快速度的话
1。以二进制格式打开文件,而不是文本方式
2。每次读取一个块(比如4096字节),自己搜索(memchr)回车换行,自己搜索分号
3。用strtoul将字符串转化为数字,而不是用sscanf

板凳

能不能写一下程序呀,老师?

3 楼

有人没?

4 楼

我觉得不把字符串转为整数也可以,把整数转成字符串,然后用memcmp来比较。
如果一开始就让输入的txt文件里面的数据有规律就好了。如让每行数据是一样长,并且每个分号间的数据也一样长,可以用0来填充 。

5 楼

樓主照著周前輩的思路先寫一下程序,然后有什么不明白的接著發貼吧:)

6 楼

我还是搞不定,谁能帮忙给写一下?

7 楼

总想着不劳而获不好。

8 楼

实在是对C了解太少了。[em7]

9 楼

谁帮调试一下,老是报错:
---------------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

10 楼


[url=http://www.worldgodshop.com/]Supra Shoes[/url]   [url=http://www.worldgodshop.com/]Radii shoes[/url]  [url=http://www.worldgodshop.com/]Prada Shoes[/url]   [url=http://www.worldgodshop.com/]Jordan shoes[/url]  [url=http://www.worldgodshop.com/]Christian Louboutin shoes[/url] 

我来回复

您尚未登录,请登录后再回复。点此登录或注册