CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

关于用fstream进行文件操作的疑问???

楼主bailingke(大钊)2002-09-07 16:26:41 在 C/C++ / C语言 提问

各位大虾好:  
          在下遇到一文件操作的问题,具体描述如下:  
          今有某单位提供给我方一数据文件,格式是这样的:第一行是字符串,说明变量名,  
  从第二行开始存放数据,每个时刻存放一行数据.每个时刻共有129个数据.  
          经我打开文件后,发现此文件有问题,有很多行的数据完全相同,估计是其他单位  
  的数据存取时间和我们要求的不一致,因而出现这种情况.  
          现在我想做到的事情是这样的:希望能把相同的行合并为一行.我的思路是这样的:用fstream中的getline取相临的行,并加以比较,相同的就抛弃,不同的就存入一个  
  新的文件中.  
          请各位大虾指点一下,我的思路是否正确?具体用什么函数操作??  
          多谢!!! 问题点数:100、回复次数:10Top

1 楼bailingke(大钊)回复于 2002-09-07 16:50:17 得分 0

请各位抽空指点一下!谢谢了!  
   
  Top

2 楼codingcoding(codingcoding)回复于 2002-09-07 17:32:43 得分 0

非要用c写吗。Awk和Python好象更简单。Top

3 楼nk_rainfall(阿斗)回复于 2002-09-07 18:01:40 得分 40

你的想法基本可以,可以参见以下下面的伪码(没编译试过)  
   
  #include   <fstream>  
  #include   <string>  
  #include   <iostream>  
  using   namespace   std;  
   
  char   Buf[1024];  
   
  int   main()  
  {  
          ifstream   in_file("Your   file   path");  
          ofstream   out_file("Your   Output   path");  
          string   sOldLine;  
          while(in_file.getline(Buf,   1024))  
          {  
                    string   temp   =   Buf;  
                    if   (sOldLine   ==   temp)  
                    {  
                            continue;  
                    }  
                    else  
                    {  
                            out_file   <<   temp   <<   endl;  
                            sOldLine   =   temp;  
                    }  
          }  
          return   0;  
  }Top

4 楼liubear()回复于 2002-09-07 18:13:55 得分 10

上面所说,基本到位,最后close   fileTop

5 楼programeer()回复于 2002-09-07 18:35:59 得分 50

我觉得可以把整个文件放在vector<string>中.对于每一个要添加的数据进行检查,看是否在string中.如果不在,则添加到vector<string>中.否则,读下一行的数据.  
   
  #include<iostream>  
  #include<string>  
  #include<fstream>  
  #include<cstdlib>  
  #include<vector>  
  using   namespace   std;  
  bool   Index(string   Substr,string   Str);  
   
  void   main()  
  {  
        vector<string>   str;  
        ifstream   in("FilePath1");//open   for   reading    
            if(in.fail())  
    {  
    cout<<"Open   File   Failure!\n";  
      exit(1);  
    }  
  string   line;  
  ofstream   out("FilePath2",ios::app);//以追加模式打开待写文件,for   writing  
   
          while(getline(in,line))  
  {                
                                  bool   exist;  
  str.push_back(line);  
                              for(int   j=0;j<str.size();j++)  
  if(!exist=Index(line,str[j]))//如果新数据不在原数据串中  
  str.push_back(line);                   //加入到str中  
  out<<line<<endl;  
  }  
  in.close();  
      }  
      out.close();  
  }  
   
  bool   Index(string   Substr,string   Str)       //Substr是否在Str中,在则返回true,否则返回false.  
      {  
        int   SubLength=Substr.size();  
        int   StrLength=Str.size();  
        for(int   i=0;i<StrLength-SubLength+1;i++)  
        {  
          if(Substr==Str.substr(i,SubLength))  
  return   true;  
        }  
        return   false;  
      }  
  Top

6 楼nk_rainfall(阿斗)回复于 2002-09-07 18:54:03 得分 0

文件的关闭在两个对象的析构中会自动进行。Top

7 楼dsangvei(十年一剑)回复于 2002-09-07 19:03:48 得分 0

programeer的主意很好Top

8 楼programeer()回复于 2002-09-08 09:01:33 得分 0

if(in.fail())  
    {  
    cout<<"Open   File   Failure!\n";  
                      in.close();////////////////这里加上这个  
      exit(1);  
    }  
  Top

9 楼bailingke(大钊)回复于 2002-09-11 09:20:31 得分 0

谢谢各位的指点  
  由于本人上网不方便  
  所以现在才看到  
  等在下回去试试  
  有了体会以后,再结帖!Top

10 楼bailingke(大钊)回复于 2002-09-13 19:29:57 得分 0

感谢各位的关注,确实给在下很多启发!  
  结帖!接分!Top

相关问题

  • 如果用fstream操作文件?
  • 文件遍历操作疑问:怎样将所有符合条件的文件更名?
  • 请问unix下是否支持文件流操作 fstream <<,>>
  • 关于fstream操作的问题。文件无法正常读取。
  • 文件操作!
  • 文件操作
  • 文件操作?
  • 文件操作
  • 文件操作
  • 文件操作

关键词

  • 文件
  • 数据
  • 操作
  • 一行
  • buf
  • include

得分解答快速导航

  • 帖主:bailingke
  • nk_rainfall
  • liubear
  • programeer

相关链接

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

广告也精彩

反馈

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