相关疑难解决方法(0)

用C++读取分隔文件

在C++中读取制表符分隔文件并将每行存储为记录的最佳方法是什么?我一直在寻找一个开源库来帮助解决这个问题,但是一直没有成功,所以看起来我必须自己编写.

c++ open-source tab-delimited-text

7
推荐指数
2
解决办法
9952
查看次数

从文本文件加载std :: map

这是一件非常简单的事情,所以我想保持它听起来很简单.我想要的只是从文件中加载一堆键值派,并将它们填充到地图中.我不关心文本的结构,只要它易于阅读.

我现在拥有的是:

  • 带有xsd生成代码的xml(overkill)
  • 协议缓冲区(也是矫枉过正)
  • INI样式文本文件

我喜欢INI文件的语法,但我不想为此编写解析器.听起来像我会做很多人在我面前做过的事情.是不是有某种类型的库来读取这样的简单结构化文件?

c++ map text-parsing

7
推荐指数
1
解决办法
1万
查看次数

从文件中读取CSV数据

如果有人问过这个我很抱歉,但我似乎找不到能帮助我的解决方案.我正在尝试从文本文件中读取数据,并最终将其存储在对象中.

文本文件有4个变量,全部用逗号分隔.

我试过这样做如下:

string v1, v2, v3, v4;
ifstream afile;
afile.open("thefile.txt");
afile >> v1 >> v2 >> v3 >> v4;
afile.close();
cout << v1 << endl;
cout << v2 << endl;
cout << v3 << endl;
cout << v4 << endl;
Run Code Online (Sandbox Code Playgroud)

该文件有多个记录.我试图现在只做1以确保它有效,但是当它读入数据时,它不会在逗号中分开.

从那里,我想将数据存储到一个对象中.以下工作:Thing*thing1 = new Thing(v1,v2,v3,v4);

虽然,当我读到5条记录时,构建上述代码行的最佳方法是什么?由于每个对象都需要一个唯一的名称,有没有办法可以使用for循环和向量进行迭代?ie for(int i = 0; i <5; i ++){//读入数据//存储在vector中}

非常感谢任何提示

c++

6
推荐指数
2
解决办法
2252
查看次数

使用C++过滤CSV数据

很抱歉提出许多人可能认为已经被问过的问题.

我有一个很长的CSV数据文件(dat.csv),有5列.我有另一个简短的CSV(filter.csv)文件,其中包含1列.

现在,我只需要从dat.csv中提取列,其中column-1与filter.csv的column-1匹配.

我通常会在BASH中使用sed/awk.但是,由于某些其他原因,我需要在C++文件中执行此操作.你能建议一种有效的方法吗?

样本数据:

data.csv

ID,Name,CountryCode,District,Population

3793,NewYork,USA,NewYork,8008278
3794,LosAngeles,USA,California,3694820
3795,Chicago,USA,Illinois,2896016
3796,Houston,USA,Texas,1953631
3797,Philadelphia,USA,Pennsylvania,1517550
3798,Phoenix,USA ,Arizona,1321045
3799,SanDiego,USA,California,1223400
3800,Dallas,USA,Texas,1188580
3801,SanAntonio,USA,Texas,1144646
Run Code Online (Sandbox Code Playgroud)

filter.csv

3793
3797
3798
Run Code Online (Sandbox Code Playgroud)

c++ csv filter

6
推荐指数
2
解决办法
978
查看次数

如何将csv文件数据读入数组?

我有一个格式如下的 CSV 文件:

1,50,a,46,50,b
2, 20,s,56,30,f
3,35,b,5,67,s
...
Run Code Online (Sandbox Code Playgroud)

我怎样才能把它变成一个二维数组,以便我可以做一些计算?

void Core::parseCSV(){
    std::ifstream  data("test.csv");
    std::string line;
    while(std::getline(data,line))
    {
        std::stringstream lineStream(line);
        std::string cell;
        while(std::getline(lineStream,cell,','))
        {
            //not sure how to create the 2d array here
        }
    }
};
Run Code Online (Sandbox Code Playgroud)

c++

6
推荐指数
1
解决办法
3万
查看次数

C++运算符的多重定义>>

我正在使用@Martin提出的解决方案来使用C++进行csv解析,因为我正在尝试避免使用像boost这样的库来解决我当前的项目.我已将他的实现放在"csv.h"标题中,并尝试将其包含在其他一些文件中.我一直收到以下错误

multiple definition of operator>>(std::basic_istream<char, std::char_traits<char> >&, CSVRow&)

当我尝试构建项目时 - 我假设发生这种情况是因为重新定义了operator>>与原始项目的冲突.我怎么能让这两个玩得好听?谢谢.

c++ csv parsing include dependency-management

5
推荐指数
1
解决办法
3072
查看次数

将 csv 文件的一行拆分为 std::vector?

我有一个函数可以逐行读取 CSV 文件。对于每一行,它将把该行分割成一个向量。执行此操作的代码是

    std::stringstream ss(sText);
    std::string item;

    while(std::getline(ss, item, ','))
    {
        m_vecFields.push_back(item);
    }
Run Code Online (Sandbox Code Playgroud)

这工作正常,除非它读取最后一个值为空的行。例如,

text1,tex2,
Run Code Online (Sandbox Code Playgroud)

我希望它返回一个大小为 3 的向量,其中第三个值只是空。然而,它只是返回一个大小为 2 的向量。我该如何纠正这个问题?

c++ csv vector std

5
推荐指数
1
解决办法
1万
查看次数

C++如何读取带分隔符的行直到每行结束?

嗨,我需要读一个看起来像这样的文件......

1|Toy Story (1995)|Animation|Children's|Comedy
2|Jumanji (1995)|Adventure|Children's|Fantasy
3|Grumpier Old Men (1995)|Comedy|Romance
4|Waiting to Exhale (1995)|Comedy|Drama
5|Father of the Bride Part II (1995)|Comedy
6|Heat (1995)|Action|Crime|Thriller
7|Sabrina (1995)|Comedy|Romance
8|Tom and Huck (1995)|Adventure|Children's
9|Sudden Death (1995)|Action
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,每部电影的类型可以从1种变化到很多......我想知道在每行结束之前我怎么能读到这些?

我现在正在做:

void readingenre(string filename,int **g)
{

    ifstream myfile(filename);
    cout << "reading file "+filename << endl;
    if(myfile.is_open())
    {
        string item;
        string name;
        string type;
        while(!myfile.eof())
        {
            getline(myfile,item,'|');
            //cout <<item<< "\t";
            getline(myfile,name,'|');
            while(getline(myfile,type,'|'))
            {
                cout<<type<<endl;
            }
            getline(myfile,type,'\n');
        }
        myfile.close();
        cout << "reading genre file finished" <<endl;
    }
}
Run Code Online (Sandbox Code Playgroud)

结果不是我想要的......它看起来像: …

c++ getline

5
推荐指数
1
解决办法
3万
查看次数

如何解析包含在引用字段中的逗号的 CSV?

我尝试了其他答案中提到的一些修复,但它们对我的输出没有影响。我不打算使用 boost 精神,因为我不确定它是否是满足我需求的最佳选择。此外,类似的帖子不涉及包含逗号的引用材料,这是我目前要解决的最后一个问题。

这是一个 C++ 程序。我使用 CSV 文件作为输入。该文件给出了印章的特征,每个条目有 23 个值(列)。当我输出 rawdata[22] 时,我希望看到第一组数据的最后一个条目。相反,我看到最后一个条目(请愿),然后是下一个印章的第一个条目(2055)。当我在十六进制编辑器中打开它时,我看到这两个词被一个“。”隔开。并且十六进制字符是 0a。我曾尝试将 \r、\n、\r\n 设置为分隔符,但它们不起作用。我不能使用“,”作为分隔符,因为它在字符串中使用,我测试了它是否可以解决我的问题,但它没有。如何分离这些值?

输出:

Petitioned 2055

样本输入:

物种 ID、王国、门、类、顺序、科、属、物种、权威、种下等级、种下名称、种下权威、种群/亚群、同义词、通用名称 (Eng)、通用名称 (Fre)、通用名称 (Spa) ,红色名录状态,红色名录标准,红色名录标准版本,评估年份,人口趋势,请愿
2055,动物,脊索动物,哺乳动物,食肉动物,蛱蝶科,Arctocephalus,australis,"(Zimmermann, 1783)",,,,,Arctophoca australis,South American Fur Seal,Otarie Fourrure Australe,Oso Marino Austral,LC,16. , 增加, N
41664,ANIMALIA,CHORDATA,MAMMALIA,CARNIVORA,OTARIIDAE,Arctocephalus,forsteri,"(Lesson, 1828)",,,,,Arctocephalus australis subspecies forsteri|Arctophoca australis subspecies forsteri,Antipodocephalis subspecies forsteri,"新西兰毛皮海豹,"新西兰毛皮海豹Seal, Black Fur Seal, Long-nosed Fur Seal, South Australia Fur Seal",,,LC,,3.1,2015,increasing,N

我的代码:

#include <iostream>
#include <sstream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;

int main() {
    string line;
    vector<string> rawdata;
    ifstream …
Run Code Online (Sandbox Code Playgroud)

c++ csv parsing

5
推荐指数
1
解决办法
1319
查看次数

C++ 更改 istream

我目前正在学习 C++ 并且正在努力理解流。今天我学到了一个很酷的东西,你可以将一个字符串流拆分为多个浮点数/整数,例如:

#include <iostream>
#include <sstream>

using namespace std;

int main() {
    stringstream ss("1 2.2");
    int val1; float val2;
    ss >> val1 >> val2;
    cout << "val1: " << val1 << endl
         << "val2: " << val2;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

现在出现了一个问题,当我使用“1,2.2”代替“1 2.2”作为输入字符串时,这类似于我从 csv 文件中得到的内容。我希望能够编写一些内容,将这样的 csv 字符串转换为与上面示例中相同类型的流。我想它看起来像

ss >> mySpecialPipe >> val1 >> val2;
Run Code Online (Sandbox Code Playgroud)

现在我知道mySpecialPipe应该做几件事:

  1. 接受输入
  2. 拆分输入
  3. 在请求时写入输入

所以我试图建立这个:

#include <vector>
#include <string>
#include <iostream>
#include <sstream>

using namespace std;

class MySpecialPipe {
    private:
        char delimiter;
    public:
        vector<string> …
Run Code Online (Sandbox Code Playgroud)

c++ istream

5
推荐指数
0
解决办法
61
查看次数