gpt4 book ai didi

c++ - 如何以这种特定方式读取和处理文件中的文本?

转载 作者:行者123 更新时间:2023-11-27 22:54:16 25 4
gpt4 key购买 nike

我有一个关于处理我正在阅读的文件中的某些名称或数字的代码的问题。所以文件中的文本如下所示:

Imp;1;down;67
Comp;3;up;4
Imp;42;right;87

如您所见,有 3 行由字符“;”分隔的单词和数字.我想一次读取每一行,并将一行中的整个字符串拆分为 words 和 numbers ,然后处理信息(将用于用数据创建一个新对象)。然后移动到下一行,依此类推,直到 EOF。

因此,我想读取文本的第一行,将其拆分为由行中的单词和数字组成的字符串数组,然后从中创建一个类的对象。例如,对于第一行,创建类 Imp 的对象,如下所示 Imp objImp(Imp, 1, down, 67)

在 Java 中,我使用 information = line.split(";")'(其中 line 是一行文本)做了同样的事情,然后使用 information[0], information[1] 访问字符串数组的成员并创建对象。我想在这里做同样的事情

最佳答案

不要使用char 数组作为缓冲区,don't use std::istream::eof .话虽如此,让我们继续解决问题。

std::getline类似于 std::istream::getline , 除了它使用 std::string 而不是 char 数组。

在两者中,参数 delim 表示定界字符,但在某种程度上它是字符,当遇到它时,std::getline 停止读取(不保存并丢弃它)。它并不意味着分隔符会神奇地在整行的每个 ; 之间为您拆分输入。

因此,您必须这样做:

#include <iostream>
#include <fstream>
#include <sstream>
#include <string>

...

std::ifstream myFile("D:\\stuff.txt"); // one statement

if (myFile.is_open()) {
std::string line;

while (std::getline(myFile, line)) { // line by line reading
std::istringstream line_stream(line);
std::string output;

while (std::getline(line_stream, output, ';')) // line parsing
std::cout << output << std::endl;
}
}

我们从 line 构造了一个 std::istringstream,所以我们可以用 std::getline 再次解析它。

关于c++ - 如何以这种特定方式读取和处理文件中的文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34640914/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com