| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2173 人关注过本帖
标题:求助高手关于对TXT文件中指定的列读取操作的问题-帮忙调试
只看楼主 加入收藏
jianguom
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2011-4-26
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:14 
求助高手关于对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
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:5 
这个用C我不知道,C#我还有思路!
如果某行指定的列输入的数和TXT文件中的列的值相同,则将此行读取另存到新的TXT文件中//这句能说明白点么?

[ 本帖最后由 qq1023569223 于 2011-4-26 10:49 编辑 ]

   唯实惟新 至诚致志
2011-04-26 10:46
jianguom
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2011-4-26
收藏
得分:0 
回复 2楼 qq1023569223
C#如何实现啊,谢谢能看下吗?
2011-04-26 10:49
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:5 
我不行 呵呵

                                         
===========深入<----------------->浅出============
2011-04-26 10:49
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:5 
下面这个代码可以读取一行的各列。其他的部分自己实现吧

程序代码:
#include <stdio.h>
#include <string.h>

int main()
{
    char n[1000] = "12;456575505;435522;96140;3;f5e6498d;13352470030;", m[100] = {0};
    int s = 0;
    while (s < strlen(n) && sscanf(&n[s], "%[^';'];", m)) {
        printf("%s\n", m);
        s += strlen(m) + 1;
    }
    return 0;    
}
2011-04-26 11:05
jianguom
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2011-4-26
收藏
得分:0 
谢谢老师,我先试试
2011-04-26 11:10
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:0 
程序代码:
using System;
using System.Collections.Generic;
using System.Text;
using namespace ReadTxt
{
    class Program
    {
        public static void Main(string[] args)
        {
            Console.WriteLine("Input the column you want to search:");  //
            int col = int.Parse(Console.ReadLine());
           
            Console.WriteLine("Input the number you want to search:");  //数,要查的
            string num = Console.ReadLine();  //你的文本中有的好像不是数字,就用string吧
          
            StreamReader sr = new StreamReader("D:\\a.txt");  //原始文件
            StreamWriter sw=  new StreamWriter("D:\\b.txt");  //保存在这里
             
            try
                {
                    string[] str = new string[300]; //如果不超过300列
                    string s = "";
                    char[] ch ={ ';' }; //以分号分隔字符串,注意要用英文符号
                    while (sr.Peek() != -1)  //检查文件结束
                    {
                        s = sr.ReadLine();  //读行
                        str = s.Split(ch, StringSplitOptions.RemoveEmptyEntries);  //分隔字符串,存入str中
                        if (str[col - 1].CompareTo(num) == 0)  //相等
                        {
                            sw.WriteLine(s);  //写入文件
                        }
                    }
                }
                catch (Exception a)  //程序异常处理
                {
                    Console.WriteLine("程序异常终止");
                }
                finally  //关闭文件流
                {
                    sr.Close();
                    sw.Close();
                }

        }
    }
}


[ 本帖最后由 qq1023569223 于 2011-4-26 11:15 编辑 ]

   唯实惟新 至诚致志
2011-04-26 11:13
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
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
回复 8楼 jianguom
不要叫老师,差得远呢

我那只是个大概思路,你根据你自己的要求改改就好了
2011-04-26 11:26
快速回复:求助高手关于对TXT文件中指定的列读取操作的问题-帮忙调试
数据加载中...
 
   



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

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