CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

急。。。。急。。。。急。。。。。。用C如何读一个文本文件的一行,每一行的长度不一样,每一行的中间有空格

楼主pingerp(当仁不让)2004-05-02 07:19:54 在 C/C++ / C语言 提问

用C如何读一个文件(例如:文本文件)的一行,每一行的长度不一样,每一行的中间有空格  
   
  例如:  
   
  CALLING_NBR     CALLED_NBR     START_TIME     DURATION  
   
  8655148 03592296879 2004/02/03   0:01:03 34  
   
  8689052 03592868899 2004/02/03   0:02:05 12  
   
  8878085 03597529283 2004/02/03   0:03:23 1  
   
  8661641 03594033744 2004/02/03   0:01:53 91  
   
   
  问题点数:0、回复次数:15Top

1 楼hslinux(幻世龙)回复于 2004-05-02 08:27:17 得分 0

getline();  
  具体用法自己查下帮助或多试试几次。  
   
  把一行读出来后是一个字符串,再把里面的几个串解析出来就可以了。Top

2 楼pingerp(当仁不让)回复于 2004-05-02 09:03:37 得分 0

假如一行的中间间隔有几个结束符号呢,能否读出一行?Top

3 楼pingerp(当仁不让)回复于 2004-05-02 09:51:52 得分 0

getline();具体怎么用啊,能否举个例子看看Top

4 楼dananhai(大男孩)回复于 2004-05-02 10:00:22 得分 0

#include   <stdio.h>  
  main(void)  
  {  
        int   i=0;  
        char   ch;  
        char   linebuffer[81];  
        FILE   *fp;  
        if((fp=fopen("d:\\t1.txt","rb"))==NULL)  
          {printf("fill   not   open   !");  
            exit(0);  
          }  
        ch=fgetc(fp);  
        while(!feof(fp)){  
                if(ch!='\n'){  
                          linebuffer[i++]=ch;  
          if(i>100)  
                                  {printf("error   occur!");  
                                    exit(0);  
                                  }  
                }  
                else{  
                          linebuffer[i]='\0';  
                          puts(linebuffer);  
                          i=0;  
                }  
              ch=fgetc(fp);  
              }  
        fclose(fp);  
  }    
      看看是不是这个,是的话给我加分啊!  
      我没给他写成独立的函数,你自己弄吧意思是这样了。我想一定有好多别的方法,我的可能是最笨的,不过你给的数据到能通过,有毛病请指出。呵呵~~~Top

5 楼cngdzhang()回复于 2004-05-02 12:20:49 得分 0

用  
  fgets  
   
   
  #include   <string.h>  
  #include   <stdio.h>  
   
  int   main(void)  
  {  
        FILE   *stream;  
        char   string[]   =   "This   is   a   test";  
        char   msg[20];  
   
        /*   open   a   file   for   update   */  
        stream   =   fopen("DUMMY.FIL",   "w+");  
   
        /*   write   a   string   into   the   file   */  
        fwrite(string,   strlen(string),   1,   stream);  
   
        /*   seek   to   the   start   of   the   file   */  
        fseek(stream,   0,   SEEK_SET);  
   
        /*   read   a   string   from   the   file   */  
        fgets(msg,   strlen(string)+1,   stream);  
   
        /*   display   the   string   */  
        printf("%s",   msg);  
   
        fclose(stream);  
        return   0;  
  }  
  Top

6 楼dananhai(大男孩)回复于 2004-05-02 13:00:33 得分 0

楼上的不能随便抄个例子就来糊弄人啊  
   
  函数名:   fgets    
  功     能:   从流中读取一字符串    
  用     法:   char   *fgets(char   *string,   int   n,   FILE   *stream);    
  程序例:    
   
  #include   <string.h>    
  #include   <stdio.h>    
   
  int   main(void)    
  {    
        FILE   *stream;    
        char   string[]   =   "This   is   a   test";    
        char   msg[20];    
   
        /*   open   a   file   for   update   */    
        stream   =   fopen("DUMMY.FIL",   "w+");    
   
        /*   write   a   string   into   the   file   */    
        fwrite(string,   strlen(string),   1,   stream);    
   
        /*   seek   to   the   start   of   the   file   */    
        fseek(stream,   0,   SEEK_SET);    
   
        /*   read   a   string   from   the   file   */    
        fgets(msg,   strlen(string)+1,   stream);    
   
        /*   display   the   string   */    
        printf("%s",   msg);    
   
        fclose(stream);    
        return   0;    
  }    
   
  Top

7 楼dananhai(大男孩)回复于 2004-05-02 13:01:44 得分 0

呵呵,请问这个等级是怎么算的Top

8 楼dananhai(大男孩)回复于 2004-05-02 13:05:53 得分 0

有些人不要来片分啊,在这里的点分真容易啊  
  哎!不容易啊,还有骗子来跟你挣分。呵呵~~~~~~~~~~~Top

9 楼mme(dog)回复于 2004-05-02 13:29:50 得分 0

唉,其实要读一行是很简单的,首先要知道一行的结尾是\r\n不要被楼上的有些人给骗了。  
   
  我给出我的函数你看看吧,很简单的东西被一些人复杂化了。  
   
  int   ReadString(FILE   *file,   char   *str)  
  {  
  int   len=0;  
  char   ch;  
   
  while(1)  
  {  
  if(feof(file))    
  {  
  *str   =   '\0';  
  return   -3;  
  }  
  ch   =   fgetc(file);  
  if((ch   ==   '\r')   ||   (ch   ==   '\n')   ||   (ch   ==   '\0'))  
  {  
  if(len   ==   0)   continue;  
  break;  
  }  
  *str   =   ch;  
  str   ++;  
  len   ++;  
  }  
  *str   =   '\0';  
  return   len;  
  }Top

10 楼lw549(那个孩子他爹)回复于 2004-05-02 15:28:19 得分 0

fscanf(file,"%s   %s   %s\n",&arg1,   &arg2,   &arg3);Top

11 楼pingerp(当仁不让)回复于 2004-05-02 16:33:32 得分 0

文件的每一行中间有不可见的分隔符号,如空格符或者结束符等等,通过什么方法可以知道他们到底是什么字符Top

12 楼Atomictry(天影)回复于 2004-07-20 12:45:46 得分 0

Standard   C++   Library:  
  isalnum()           测试字符是否为数字或字母  
  isalpha()           测试字符是否是字母  
  iscntrl()           测试字符是否是控制符  
  isdigit()           测试字符是否为数字  
  isgraph()           测试字符是否是可见字符  
  islower()           测试字符是否是小写字符  
  isprint()           测试字符是否是可打印字符  
  ispunct()           测试字符是否是标点符号  
  isspace()           测试字符是否是空白符号  
  isupper()           测试字符是否是大写字符  
  isxdigit()         测试字符是否是十六进制的数字  
  Top

13 楼datuhao(峡谷)回复于 2004-07-20 12:53:06 得分 0

呵呵,有意思,继续Top

14 楼TalosChen(人生如梦亦如幻)回复于 2004-07-20 13:37:49 得分 0

文本文件的话,看你用什么方法打开,以二进制形式打开的话,回车与换行都是可读的,以文本形式打开的话,回车是不可读的,只有换行是可读的,所以不管怎样,都可以换行来作为一行是否结束的标志。至于判断中间的字符是什么字符,完全可以用一个循环内的switch语句来处理。Top

15 楼skyfine(柳荣宏)回复于 2004-07-20 17:10:49 得分 0

建议getline().mfc有CStdioFile类也有读一行。Top

相关问题

  • 为什么读文本文件时,C++认为空格是结束??
  • C#制作文本文件
  • 文本文件的行长度问题
  • c#中如何写文本文件?
  • ASP生成文本文件的时候,怎么来用空格填充长度,达到对齐的效果,有什么好算法?多谢了
  • 如何将文本文件中的空格去掉
  • 怎样去除一个文本文件中的空格!!
  • 文本文件读取为什么不显示出空格
  • 怎样按字节长度读取文本文件?
  • 怎样用Winsock控件接受长度>65535的文本文件???

关键词

  • 字符
  • 测试
  • 函数
  • 数字
  • start
  • 一行
  • 文本文件
  • linebuffer
  • 测试字符是否
  • stream

得分解答快速导航

  • 帖主:pingerp

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo