当前位置: 首页 > 知识库问答 >
问题:

如何读取带有多个分隔符的文本文件?

戎桐
2023-03-14

我有一个源代码,它读取文本文件并存储到一个元组类型的向量中:

#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <tuple>
#include <algorithm>

typedef std::vector<std::tuple<int, int, double>> VectorTuple;

VectorTuple Readfile(std::string filename)
{
    std::ifstream File(filename);
    if (!File.is_open())
    {
        std::cout << "File '" << filename << "' does not exist.";
        exit(1);
    }
        
    VectorTuple data;
    std::string line;

    while (std::getline(File, line))
    {
        std::stringstream ss(line);
        int a, b; double c;
        if (ss >> a >> b >> c)
        {
            data.push_back(std::tuple<int, int, double>(a, b, c));
        }
    }

    return data;
}

int main()
{
    std::string file = "data.txt";
    auto vt = Readfile(file);
    
    for_each(vt.begin(), vt.end(), [](std::tuple<int, int, double> i){
        std::cout << std::get<0>(i) << ", " << std::get<1>(i) << ", " << std::get<2>(i) << std::endl;
    });
    
    return 0;
}

data.txt包含以下数据

30000 | 49999 | 4
50000 | 119999 | 6.5
120000 | 279999 | 8
280000 | 499999 | 9
500000 | 999999 | 10
1000000 | 1999999 | 13
2000000 | 2499999 | 15
2500000 | 2999999 | 17.5
3000000 | 3499999 | 20
3500000 | 3999999 | 22.5
4000000 | 4499999 | 25
4500000 | 4999999 | 27.5

因此数据由空格+垂直线+空格(多重分隔符)分隔。

如何更改源代码以处理多个分隔符?

注意:如果数据仅用空格隔开,则程序可以工作。

共有1个答案

孙凌龙
2023-03-14

您可以通过以下方式读取和丢弃:

std::stringstream ss(line);
int a, b; double c;
char s;
if (ss >> a >> s >> b >> s >> c)
{
    data.push_back(std::tuple<int, int, double>(a, b, c));
}
 类似资料:
  • 问题内容: 我正在尝试读取以下形式的大文本文件: 我想在文本文件中将此字符串作为一个大的Java字符串读取。这可能吗?我知道使用split方法。 它可以逐行读取它,但我真正需要的是在“ +”号处分割此长文本字符串。之后,我想将其存储为数组,arraylist,列表,… 谁能帮我这个?因为互联网上的所有信息都只是逐行读取文件。提前致谢! 问题答案: 您可以使用或任何IO类读取文件。假设文件中包含该字

  • 我有一个txt文件,数据如下所示 我在使用这段代码时读到了数据: 由于我的时间列,它不能正常工作,因为是通过逗号分隔的。我该如何解决这一点,如何使它工作,即使在我有多列这样的时间格式的情况下? 我想获得一个如下所示的数据帧: 多谢!

  • 我有以下模式: 在第一分隔符中,可以没有开始的圆括号、数字的组合和结束的圆括号。但是,数字和闭括号的组合是存在的,如果有开括号的话。 第二个分隔符从文本的第一列开始,它是该行唯一的单词。 我的正则表达式: 请帮帮我.

  • 问题内容: 我尝试将文件读入熊猫。该文件具有以空格分隔的值,但是我尝试使用不同数量的空格: 但这不起作用 问题答案: 添加参数,它比正则表达式更快。

  • 问题内容: 我有一些看起来像这样的数据: 我想将其导入3列数据框,例如 我一直试图读取数据,因为2列在’:’上分割,然后在’‘上分割了第一列。但是我发现它令人讨厌。是否有更好的方法可以直接在导入时对其进行分类? 目前: 但是,由于我的数据处于领先地位,这使情况更加复杂。 我觉得这应该是一个简单的任务,但是目前我正在考虑逐行读取它,并在导入之前使用一些find replace清理数据。 问题答案: