【问题标题】:Read from an existing text file in c++从 C++ 中的现有文本文件中读取
【发布时间】:2015-11-22 05:58:23
【问题描述】:

我有一个包含食物详情的文件 (Existingfile.txt),如下所示:

  1. 意大利面 1.99
  2. 芝士蛋糕4.99

等等。我必须编写一个读取这些记录的 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 的新手。如果我的问题不正确,请发表评论,我会清除它。各位,我需要你们的帮助!

【问题讨论】:

  • 是的,这是可能的,但不能直接进入您的结构。您可以将其读入字符串字节解析,这对于这种格式并不特别容易。也许fscanf 可以帮助你。你的文件格式是灵活的还是给定的?
  • 简单的答案是否定的,不是我认为你的意思。一个问题是您的模式(例如它)是:1)作为整数的索引 2)句点 3)一系列以价格结尾的空白分隔词 4)价格。但是您拥有的结构没有那么多信息。例如,结构无法“知道”价格“10.99”的第一个字符不是价格之前的字符串的一部分。您需要编写一些简单的解析代码。
  • @CompuChip 我在文件格式上有灵活性。它没有给出。
  • @user2460798 我可以更改文件以删除句点。至于食物的名称,我可以在末尾添加'\0',这样字符串在遇到'\0'时就会终止。那有可能吗?

标签: c++ file-handling


【解决方案1】:

你可以,但是如果你使用这样的文本会很复杂,因为它会格式化。最简单的方法是使用分隔符,因此它可以被分隔符(例如空格)分割。例如简单的文本:

1;Pasta;300
2;Chess cake;400

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

instream >> num >> food >> total;

但您的文本不得包含除定界符以外的空格。

【讨论】:

    【解决方案2】:

    你试过编译吗? 如果结构的所有元素都是固定大小的 c-style-strings,并且输入行的长度是固定的,那么它可以工作。

    但是,您不能这样阅读,因为元素基本上不是字符。例如,成本是一个浮点数。如果您阅读“ 19.99”。它只是一个字符串“19.99,而不是浮点值 19.99。

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

    【讨论】:

    • 我在问题中提到的代码是一个小程序的一部分,如下所示:我向用户显示所有项目。用户输入项目编号。它被添加到他的购物车中。我想使用结构,因为它很容易比较项目编号。用户进入文件并找到项目的成本和名称。我将为此使用以下代码:(在下一条评论中)
    • @Compuchip(请阅读我之前的评论并查看):codepad.org/mVN5RAT6
    【解决方案3】:

    我认为有一种更简单的方法可以使用哈希表来存储您的数据。查看此链接以了解如何实现它。 link1

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

    【讨论】:

    • 你的想法的问题是整个项目列表(它非常大)将存储在程序中(我猜)。我不希望我的程序非常大。这就是为什么我希望信息只在文件中,并且我可以随时显示它。如果我错了,请纠正我
    • 你是对的。因此,您可以创建一个结构并将文件的每一行放入一个 1xn 维度的向量中,其中向量的每一行将存储文件的每一行。可以看参考here
    【解决方案4】:
    ifstream ob("text.txt")
    string record ; 
     string temp ; 
    
    while(getline(ob, record))
    {
       stringstream ss(record); 
    ss>>s.no>>s.cost ; 
    
    
    }
    

    【讨论】:

    • 虽然这段代码可以回答这个问题,但最好包含一些上下文,解释它是如何工作的以及何时使用它。从长远来看,纯代码的答案没有用处。
    猜你喜欢
    • 2020-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多