C ++从文本文件中读取并将其分成变量

Posted

技术标签:

【中文标题】C ++从文本文件中读取并将其分成变量【英文标题】:C++ read from a text file and seperate it into variables 【发布时间】:2020-04-09 06:29:45 【问题描述】:

这是我正在编写的程序中的一段代码

//declaration of builder variables
std::string name;
int ability;
int variability;

std::vector<string> builderVector;


std::ifstream buildersList("Builders.txt");
std::string outputFile = "output.txt";
std::string input;

void readFile() //function to read Builders file


   std::string line;

// read each line for builders
while (std::getline(buildersList, line)) 

    std::string token;
    std::istringstream ss(line);

    // then read each element by delimiter
    while (std::getline(ss, token, ':')) //spilt the variables 

      ss >> name >> ability >>  variability; 
      builderVector.push_back(token);
      cout << name;


这是我的文本文件

Reliable Rover:70:1.
Sloppy Simon:20:4.
Technical Tom:90:3.

通过使用分隔符,它返回以下内容

70:1.20:4.90:3

到目前为止,该程序成功读取了一个文本文件“Builders.txt”,并使用分隔符在整个顶部拆分以区分每条记录并将其存储在一个向量中。我现在要做的是将用冒号分隔的每个元素分配给一个变量。例如,Reliable Rover 是名称,70 是能力,1 是可变性。在我上面的代码中,我尝试了这一行

ss >> name >> ability >>  variability; 

但是当我使用 cout 返回一个值时,它只返回能力和可变性

谢谢。

【问题讨论】:

为什么在这里while (std::getline(ss, token, '.')) //spilt into different records 使用getline 读取,然后在ss &gt;&gt; name &gt;&gt; ability &gt;&gt; variability; 使用iostream 读取相同的值?分隔符似乎是 ':' 而不是 '.'?读取每个token 后,您需要分配给nameabilityvariability 之一(使用std::stoi 表示整数)不再使用iostream 从ss 读取。请提供A Minimal, Complete, and Verifiable Example (MCVE)。 这能回答你的问题吗? How to split the elements of a text file in C++ @AMIR 我已经完成了这一步。这不是我要求的,但谢谢你 【参考方案1】:

您应该使用外部循环读取一行,并使用您的内部循环使用分隔符将其拆分。 现在,您的内部循环只是删除了“。”在每一行的末尾。 尝试以下方式:

while (std::getline(buildersList, line)) 
    line.pop_back();//removing '.' at end of line
    std::string token;
    std::istringstream ss(line);

    // then read each element by delimiter
    int counter = 0;//number of elements you read
    while (std::getline(ss, token, ':')) //spilt into different records
      switch (counter) //put into appropriate value-field according to element-count
      case 0:
        name = token;
        break;
      case 1:
        ability = stoi(token);
        break;
      case 2:
        variability = stoi(token);
        break;
      default:
        break;
      
      counter++;//increasing counter
    
    cout << name<<" "<<ability<<" "<<variability<<"\n";


根据需要添加错误检查(例如stoi

【讨论】:

以上是关于C ++从文本文件中读取并将其分成变量的主要内容,如果未能解决你的问题,请参考以下文章

保存名称从文本框中读取的文件。 C#

从文本文件中读取数据并将其分配给数据框的最快方法是啥?

从C中的文本文件读取int值

创建一个从数据馈送中读取文本文件并将其转换为 php 的目标文件的函数

从文本文件中读取数据并将其嵌入到 HTML 网页中。如何?

从.txt文件复制文本并将其分配给Python中的变量[重复]