0

我的问题是我正在尝试加载 Linux 格式的文本文件并定期阅读它,就像在 C++ 应用程序中打开 Windows 格式的文本文件一样。当文件完全按照我希望它在 Windows 中的格式进行格式化并将文件中的数据加载到列表中时,我已经让它完美地工作了。

为了更好地描述我的问题,我现在可以做的是,如果我有一个制表符分隔的文件,我可以将每一行的所有内容存储到一个字符串列表中,其中每个字符串都是任意的每个选项卡都是分开的。然后我有一个所有行的列表。

例如,我正在阅读的文本文件是这样的:

156   Hit   83.2   23:34
23    Miss  21.4   23:38

等等....

下面的这段代码spinet是我一直在使用的,我在其他地方找到了帮助,并对其进行了修改以使其按我的需要工作。它将在列表中创建一个包含两个项目的列表,其中每个项目包含一个由 4 个字符串组成的列表,每个字符串代表当前行的每个“列”中的内容。希望这解释得足够透彻。

    ifstream infile(file);
list <list <string> > data;
while (infile){
    string s;
    if (!getline( infile, s )) break;

        std::istringstream ss ( s );
        list <string> record;

    while (ss){
        string s;
        if (!getline( ss, s, '\t' )) break;
            record.push_back( s );
    }
    data.push_back( record );
}

这正是我想要做的,但是不是我将从格式化为 Windows 文本文件中读取的文本文件,而是一个 Linux 文本文件,并且在每行中的每个“项目”之间不会有一个选项卡; 而是包含随机数量的空格。我的想法是我可以以二进制模式打开文件并以这种方式读取它,而不是让制表符成为我的分隔符,我可以选择任意数量的空白。但是我不完全确定如何做到这一点,因为我对 C++ 还比较陌生,并且还没有专门从 Windows C++ 应用程序中读取 Linux 格式的文本文件。任何帮助将不胜感激。提前致谢!

4

1 回答 1

2

这与 Linux 与 Windows 无关。您可以>>用来执行空格分隔字段的格式化输入:

string s;
while (ss >> s)
    record.push_back(s);

要显式跳过空格,请使用std::ws; 要禁用空格跳过,请使用std::noskipws.

于 2013-08-14T20:29:59.687 回答