相关疑难解决方法(0)

将整个ASCII文件读入C++ std :: string

我需要将整个文件读入内存并将其放在C++中std::string.

如果我把它读成a char[],答案很简单:

std::ifstream t;
int length;
t.open("file.txt");      // open input file
t.seekg(0, std::ios::end);    // go to the end
length = t.tellg();           // report location (this is the length)
t.seekg(0, std::ios::beg);    // go back to the beginning
buffer = new char[length];    // allocate memory for a buffer of appropriate dimension
t.read(buffer, length);       // read the whole file into the buffer
t.close();                    // close file handle

// ... Do stuff with buffer here ...
Run Code Online (Sandbox Code Playgroud)

现在,我想做同样的事情,但是使用a std::string而不是a char[] …

c++ string file-io caching standard-library

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

如何在标准字符串中搜索/查找和替换?

有没有办法用另一个字符串替换所有出现的子字符串std::string

例如:

void SomeFunction(std::string& str)
{
   str = str.replace("hello", "world"); //< I'm looking for something nice like this
}
Run Code Online (Sandbox Code Playgroud)

c++ replace std

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

如何在C++中读取和操作CSV文件数据?

相当不言自明,我尝试谷歌并得到了很多可怕的expertsexchange,我在这里搜索也无济于事.在线教程或示例是最好的.多谢你们.

c++ csv

51
推荐指数
6
解决办法
14万
查看次数

如何使用逗号分隔值读写/写入文本文件

如果我的文件是逗号分隔值,我如何从文件中读取数据

1, 2, 3, 4, 5\n
6, 7, 8, 9, 10\n
\n
Run Code Online (Sandbox Code Playgroud)

在读完文件后,我想将数据写回到上面相同格式的其他文件中.

我可以使用获得总行数

string line;
while(!file.eof()){
      getline(file,line);
      numlines++;
    }
    numline--; // remove the last empty line
Run Code Online (Sandbox Code Playgroud)

但我怎么知道一行/一行的总位数?

我还有一些存储数据的向量.所以,我想读取第一行,然后计算该行中元素的总数,这里是5(1,2,3,4,5)并将它们存储在数组/向量中,然后读取下一行并将它们存储在向量中再等等,直到我到达EOF.

然后,我想将数据写入文件,我想这将完成将数据写入文件的工作,

numOfCols=1;
for(int i = 0; i < vector.size(); i++)
{
    file << vector.at(i);
    if((numOfCols<5) file << ",";//print comma (,)
    if((i+1)%5==0)
    {
                  file << endl;//print newline after 5th value
                  numOfCols=1;//start from column 1 again, for the next line
    }
    numOfCols++;
}
file << endl;// last new line
Run Code Online (Sandbox Code Playgroud)

所以,我的主要问题是如何用逗号分隔值从文件中读取数据?

谢谢

c++ csv

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

什么是C++中CSV解析/写入的首选库?

我见过这个帖子:如何在C++中读取和解析CSV文件?

但重新发明轮子以获得像CSV解析器一样通用的东西似乎很愚蠢.Boost有一些便于解析的例程,但没有开箱即用的东西.

在其他地方,我看到与.NET相关的推荐库或其他特定于平台的库.很难相信没有一个首选的开放C++库可以为这个例程做点什么.

有什么建议?

c++ csv parsing boost

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

c ++从.csv文件中读取

我有这个代码,它应该在控制台中输入来自.csv文件的信息;

while(file.good())
{

    getline(file, ID, ',');
    cout << "ID: " << ID << " " ; 

    getline(file, nome, ',') ;
    cout << "User: " << nome << " " ;

    getline(file, idade, ',') ;
    cout << "Idade: " << idade << " "  ; 

    getline(file, genero, ' ') ; 
    cout << "Sexo: " <<  genero<< " "  ;

}
Run Code Online (Sandbox Code Playgroud)

还有一个csv文件(当我用记事本打开时):

0,Filipe,19,M

1,Maria,20,F

2,Walter,60,M
Run Code Online (Sandbox Code Playgroud)

每当我运行程序时,控制台都会显示:

意外的输出

我的问题是为什么程序不是在每一行中重复那些cout消息而不是仅在第一行中重复

顺便说一句,nome是名字,idade是年龄,而genero/sexo是性别,在创建这篇文章之前忘了翻译

c++ csv file getline

15
推荐指数
2
解决办法
11万
查看次数

用C++解析文件

我有以下格式的字符串数据:"Ronit","abc""defgh","abcdef","fdfd",

当逗号不在字符串中时,有人可以在C++中建议一些好的代码来返回以逗号分隔的标记吗?

即它应该返回

  1. "Ronit"
  2. "ABC" "defgh"
  3. "ABCDEF",FDFD"

更清楚

谢谢大家的帮助.

下面是我的示例文件,作为输入,

第一行会告诉我我有多少列#

1,名称,NAME3,NAME4

"user1","user,user2","user3","userrr

rrr4"

"用户1","用户2","用户3","我们

ER4"

"用户1", "用户2", "用户3", "USER4"

"","user2",","",#

下面是csv文件的输出,请给我编译代码,以便我可以测试,再次感谢您的帮助.

第1行,1)user1,2)user,user2 3)user3 4)userrrr4

注意rr4在下一行.

第2行,1)user1 2)user2 3)user3 4)us er4

注意er4在下一行.

第3行,1)user1 2)用户,2 3)user3 4)user4

第4行1)2)user2 3)4)

c++ string parsing

14
推荐指数
2
解决办法
1443
查看次数

C/C++与Python标准库的等价物

我在很大程度上取决于Python的标准库,既为有用的数据结构和操纵(例如,collectionsitertools)和公用事业(如optparse,jsonlogging),跳过样板,只是把工作的事情.通过关于C++标准库的文档,它似乎完全与数据结构有关,而在Python的标准库中几乎没有"包含电池"的方式.

Boost库是我所知道的唯一类似于Python标准库的开源C++库集合,但是它确实有实用程序库,例如正则表达式支持,其中大部分也专用于数据结构.令我感到非常惊讶的是,即使是确保解析和编写CSV文件这样简单的事情,使用Python csv模块变得非常简单,看起来需要在C++中自己滚动(即使你利用Boost的一些解析库).

是否有其他开源库可供C++提供"电池"?如果没有,你作为一个C++程序员做什么:寻找个人实用程序库(如果是这样,如何),或者只是自己动手(这看起来很烦人和浪费)?

c++ python standard-library c++-standard-library

14
推荐指数
1
解决办法
2250
查看次数

我可以在C++函数getline中使用2个或更多分隔符吗?

我想知道如何在getline功能中使用2个或更多分隔符,这是我的问题:

该程序读取一个文本文件......每一行都是如下:

   New Your, Paris, 100
   CityA, CityB, 200
Run Code Online (Sandbox Code Playgroud)

我正在使用getline(文件,行),但我得到整条线,当我想要获得CityA,然后是CityB,然后是数字; 如果我使用','分隔符,我不知道下一行是什么时候,所以我试图找出一些解决方案..

虽然,我怎么能用逗号和\n作为分隔符?顺便说一句,我正在操纵字符串类型,而不是char,所以strtok是不可能的:/

一些划痕:

string line;
ifstream file("text.txt");
if(file.is_open())
   while(!file.eof()){
     getline(file, line);
        // here I need to get each string before comma and \n
   }
Run Code Online (Sandbox Code Playgroud)

c++ getline delimiter

12
推荐指数
2
解决办法
2万
查看次数

用C++实现快速,简单的CSV解析

我试图解析一个简单的CSV文件,其格式如下:

20.5,20.5,20.5,0.794145,4.05286,0.792519,1
20.5,30.5,20.5,0.753669,3.91888,0.749897,1
20.5,40.5,20.5,0.701055,3.80348,0.695326,1
Run Code Online (Sandbox Code Playgroud)

所以,一个非常简单和固定的格式文件.我将这些数据的每一列存储到STL向量中.因此我尝试使用标准库保持C++方式,并且我在循环中的实现看起来像:

string field;
getline(file,line);
stringstream ssline(line);

getline( ssline, field, ',' );
stringstream fs1(field);
fs1 >> cent_x.at(n);

getline( ssline, field, ',' );
stringstream fs2(field);
fs2 >> cent_y.at(n);

getline( ssline, field, ',' );
stringstream fs3(field);
fs3 >> cent_z.at(n);

getline( ssline, field, ',' );
stringstream fs4(field);
fs4 >> u.at(n);

getline( ssline, field, ',' );
stringstream fs5(field);
fs5 >> v.at(n);

getline( ssline, field, ',' );
stringstream fs6(field);
fs6 >> w.at(n);
Run Code Online (Sandbox Code Playgroud)

问题是,这非常慢(每个数据文件有超过100万行),在我看来有点不优雅.有没有更快的方法使用标准库,或者我应该只使用stdio函数?在我看来,整个代码块将减少为单个fscanf调用.

提前致谢!

c++ csv standard-library

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