| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2173 人关注过本帖
标题:求助高手关于对TXT文件中指定的列读取操作的问题-帮忙调试
取消只看楼主 加入收藏
jianguom
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2011-4-26
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:7 
求助高手关于对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 编辑 ]
搜索更多相关主题的帖子: 左右 运行程序 键盘 
2011-04-26 10:44
jianguom
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2011-4-26
收藏
得分:0 
回复 2楼 qq1023569223
C#如何实现啊,谢谢能看下吗?
2011-04-26 10:49
jianguom
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2011-4-26
收藏
得分:0 
谢谢老师,我先试试
2011-04-26 11:10
jianguom
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2011-4-26
收藏
得分:0 
回复 5楼 voidx
能不能详细呢?
运行的结果格式有问题。
谢谢哈。
2011-04-26 11:16
jianguom
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2011-4-26
收藏
得分:0 
回复 7楼 qq1023569223
谢谢老师,运行有好多错误啊?
2011-04-26 11:23
jianguom
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2011-4-26
收藏
得分:0 
回复 10楼 voidx
我对C这几天用才看了二天,所以好多不太懂,有时间能帮我完善一下不,
只需要对指定的第5列查找就行,只是数字,提示查3的行,如何实现?
2011-04-26 11:34
jianguom
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2011-4-26
收藏
得分:0 
回复 13楼 qq1023569223
非常感谢,认识你太好了。
2011-04-26 13:17
jianguom
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2011-4-26
收藏
得分:0 
谁帮调试一下,老是出错:
#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;
}
2011-04-27 13:49
快速回复:求助高手关于对TXT文件中指定的列读取操作的问题-帮忙调试
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.047002 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved