欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

文件数据处理

程序员文章站 2022-06-11 13:34:12
...

一.前言:

文件是根据特定的目的而收集在一起的有关数据的集合。
例如:关于学生信息的文件
有姓名,成绩,生日,身份证号码等。

   文件的分类:
   1.文本文件
   2.二进制文件
   
    文件操作的大致步骤:
    1.新建一个文件流对象。
    2.把文件流对象和文件关联起来,打开文件。
    3. 操作文件流。
    4. 关闭文件流。
    
      二.例子:
        题目:
      小明班长有一份成绩记录的文件,格式为每行由一名同学的名字和若干门课程的成绩,同学门选课的数目不同。 
       要求:编写一个程序,计算每名同学的平均成绩,并将结果保存在另一份文件,格式为每行一名学生的姓名,总分,课程数,平均分。
        
        分析:
           步骤1:逐行地读取小明手中的文件中的数据,并分别提取其中的名字和成绩。
                步骤2:计算出总成绩,在计算出平均分。 
                  步骤3:按要求逐行地写文件。
                  
 (1) 如何保存读取出的数据?
   答: 用结构体保存。
    一名学生的信息: 名字 + 成绩 

struct students{

  string name;  //某同学的名字。 
       vector<int> cj;  //科目数目未知。

};
整个班级的成绩表:
vector tongxue;

(2) 如何读写文件?
ifstream类:istream的派生类,用来输入(读文件)的文件流。
ofstream类:ostream的派生类,用来输出(写文件)的文件流。
fstream类:iostream的派生类,把文件连接到流对象用来输入和输出(读写)。
头文件:

istringstream: istream的派生类,用来从string对象中读取数据。
ostringstream:ostream的派生类,用来向string对象写入格式化的内容。
stringstream:iostream的派生类,既可以从字符串读取数据,也可以将数据写入字符串。 
头文件:<sstream>  包含两个特别操作:
1. 返回字符串流strm中保持的字符串的副本  
    strm.str();
2. 将字符串s复制到字符串流strm中,返回void。  
   strm.str(s);  

具体代码:

#include
#include
#include
#include
#include

using namespace std;
struct students{
string name;
vector cj;
};

int main()
{
vector tongxue;
ifstream in(“cj.txt”); //定义对象和打开文件一步完成。
while(!in.eof())
{
students x;
string shuju;
getline(in,shuju); //读取一行文件,即一个学生的所以数据;
if(shuju.empty())
{
continue; // 略过空行
}

                                   istringstream is(shuju); 
                                      //用字符串流逐行提取学生的数据。     
                                        is >> x.name;             //姓名; 
                                        int score;      
                                     while(is >> score)     
                                          {       
                                                 x.cj.push_back(score);     
                                           }     
                                           tongxue.push_back(x);  
                                    }    
                                   in.close();

ofstream out(“pjf.txt”); //打开输出文件准备写结果;
for(int i = 0; i != tongxue.size(); ++i)
{
ostringstream xinxi("");
xinxi<< (tongxue[i].name) << " ";
int sum = 0;
for(int y=1 ; y != tongxue[i].cj.size(); ++y)
{
sum += tongxue[i].cj[y];
}
double pingjun;
int KMnumber= tongxue[i].cj.size();
if(KMnumber != 0)
{
pingjun = (sum*1.0)/(KMnumber);
}
else
{ pingjun = 0; }

xinxi.precision(1);
xinxi<<sum<<" “<<KMnumber
<<” "<<fixed<<pingjun;
out<<xinxi.str()<<endl;
}
out.close(); r
eturn 0;
}

相关标签: 文件数据处理