从c ++中的现有文本文件中读取

时间:2015-11-22 05:58:23

标签: c++ file-handling

我有一个文件(Existingfile.txt),其中包含食物项目的详细信息,如下所示:

  1. Pasta 1.99
  2. 芝士蛋糕4.99
  3. 等等。我必须编写一个读取这些记录的c ++程序。我可以创建如下结构来读取单个结构的记录吗?

    struct food
    {
    int no;
    string name;
    float cost;
    }s;
    
    //TO read from file
    
    void read(){
    fstream f;
    f.open("Existingfile.txt",ios::in);
    while(!f.eof()){
    f.read((char*)&s,sizeof(s));
    .
    .
    .
    
    }
    .
    .
    .
    f.close();
    
    }
    

    P.S:我是stackoverflow的新手。如果我的问题不正确,请发表评论,我会清除它。拜托,伙计们,我需要你的帮助!

4 个答案:

答案 0 :(得分:0)

你可以,但是如果你使用这样的文本因为格式化它会非常复杂。简单的方法是使用分隔符,因此可以通过分隔符(例如空格)进行分割。例如简单的文字:

1;Pasta;300
2;Chess cake;400

您可以按;字符拆分它。或者,如果您使用空格作为分隔符,那么您可以使用输入流。

instream >> num >> food >> total;

但您的文字除分隔符外不得包含空格。

答案 1 :(得分:0)

您是否尝试过编译? 如果结构的所有元素都是固定大小的c样式字符串,并且如果输入行的长度是固定的,那么它可以起作用。

然而,你不能这样读,因为元素基本上不是字符。例如,成本是一个浮动。如果您阅读'19 .99'。它只是一个字符串“19.99,而不是浮动值19.99。

我建议您读取一行,将其保存到字符串缓冲区,然后您可以编写代码来解析信息。或者只使用fscanf

答案 2 :(得分:0)

我认为使用哈希表可以更轻松地存储数据。看一下这个链接,找出如何实现它。 link1

或者,您也可以使用数组来执行此操作。 link2

答案 3 :(得分:0)

ifstream ob("text.txt")
string record ; 
 string temp ; 

while(getline(ob, record))
{
   stringstream ss(record); 
ss>>s.no>>s.cost ; 


}