c++ - 比较和拆分文本文件中的字符串

标签 c++ text-files ifstream string-comparison

我试图在 C++ 中打开一个文本文件并逐行读取它,直到找到特定的字符串,但是数据也被分成不同的部分...

文本文件如下所示:

entry_one:true,true,false;
entry_two:true,false,false;
entry_three:false,false,false;
entry_four:true,false,true;

我基本上需要将文本文件读入内存,遍历每一行直到找到我要查找的特定“entry_...”,然后我需要将 bool 值数据拆分为变量。

目前我的想法是:

ifstream stream;
string line;
stream.open(filepath);
if (stream)
{
    size_t sizepos;
    while (stream.good()){
        getline(stream, line);
    }
}

上面的代码至少会将文本文件打开到内存中以便读取,然后可以使用 getline 读取当前行...

但我如何检查它是否是我需要的正确条目,然后将 true/false 拆分为变量?

例如在文本文件中找到第二个条目,并将每个 true/false 放入以下变量中

bool bEntryTwo1 = false;
bool bEntryTwo2 = false;
bool bEntryTwo3 = false;

我很困惑和困惑,有谁知道他们在做什么来帮助我解决这个问题?谢谢! :)

最佳答案

我建议将文本行建模为记录,然后读取每条记录:

struct Record
{
  std::string name;
  bool        entry1;
  bool        entry2;
  bool        entry3;
};

接下来是加入operator>>读入数据成员:

struct Record
{
  //...
  friend std::istream& operator>>(std::istream& input, Record& r);
};
std::istream& operator>>(std::istream& input, Record& r)
{
  std::string name;
  std::getline(input, r.name, ',');
  char comma;
  input >> r.entry1 >> comma >> r.entry2 >> comma >> r.entry3;
  return input;
}

然后您将从文件中读取每条记录并只处理您要查找的记录:

Record r;
while (my_data_file >> r)
{
  if (r.name = Name_To_Find)
  {
    Process_Record(r);
    break;
  }
}

阅读记录的一个好处是,当您找到该名称时,您将获得完整的信息。

另一种方法是将所有记录读入内存(例如std::vector),然后搜索内存以找到它。

有关详细信息,请在互联网上搜索“stackoverflow c++ 读取文件 CSV”。

关于c++ - 比较和拆分文本文件中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41233157/

相关文章:

C++ 错误 : invalid Operands of types 'double' and <unresolved overloaded function type' to binary 'operator'

android - 如何更新Android应用程序中的txt文件?

c++ - ifstream 在 eof 之后仍在读取

c++ - 枚举引用参数传输而不是 int 引用参数

c++ - 按对象的属性对对象的 vector 进行排序

c++ - 阶乘函数不适用于大数

c++ - 为什么 rdbuf() 不打印任何东西?

Delphi - 打开文本文件共享冲突

php - 如何减小文本文件的大小?

c++ - 正确选择文件流对象