求助高手关于对TXT文件中指定的列读取操作的问题-帮忙调试
各位老师:我是学VB的,由于要处理TXT文件相当大(约为80万行,300列左右),用VB处理起来相当慢,所以求助C友高手解决此问题,谢谢!!
问题是这样的:
有一个以分号分隔TXT文件,想通过对指定的列输入相应的数进行查找,如果某行指定的列和输入的数一致,那么将该行全部读取放到一个新的TXT文当中,文件格式不变;
一个以分号分隔的TXT文件,当运行程序能达到的目的是:
1、提示你从键盘输入指定操做的列.
2、提示你从键盘输入对指定的列想要查到的数.
3、如果某行指定的列输入的数和TXT文件中的列的值相同,则将此行读取另存到新的TXT文件中.
...
将整个文件中所有的符合条件的行全部放到新的TXT中去.
------------------------------------------------------
例如:TXT文档的格式如下:
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文档中。
-----------程序-------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* max number of words a line contains */
#define WORD_NUM 7
/* max number of letters a line contains*/
#define LINE_MAX 300
/* max number of letters a word caontains*/
#define WORD_MAX 30
void Handle(const char * input_file_name, const char *output_file_name, int colomn_no, char *value)
{
int counter = 0;
char line[LINE_MAX], line_backup[LINE_MAX];
char content[WORD_NUM+1][WORD_MAX];
FILE * input_fp = fopen(input_file_name, "r");
if (input_fp == NULL) {
printf("file open error\n");
exit(1);
}
FILE * output_fp = fopen(output_file_name, "w+");
if (output_fp == NULL) {
fclose(output_fp);
printf("file open error\n");
exit(1);
}
while (fscanf(input_fp, "%s", line) && !feof(input_fp)) {
strcpy(line_backup, line);
char *s = strtok(line, ";");
int i = 1;
while (s != NULL) {
strcpy(content[i++], s);
s = strtok(NULL, ";");
}
if (strcmp(content[colomn_no], value) == 0) {
fprintf(output_fp, "%s\n", line_backup);
++counter;
}
}
fclose(input_fp);
fclose(output_fp);
printf("%7d lines match in total\n", counter);
}
int main()
{
int colomn_no;
char value[30];
printf("please input colomn number:\n");
scanf("%d", &colomn_no);
printf("please input the value:\n");
scanf("%s", value);
Handle("in.txt", "out.txt", colomn_no, value);
return 0;
}
[ 本帖最后由 jianguom 于 2011-4-27 13:50 编辑 ]