C++将csv文件加载到二维矢量
C++. Loading csv files to 2D vectors
我已经将CSV文件(platforms.csv
)加载到2D向量中,看起来没有问题,但当我从[0][0]
操作字符串时,它的行为很奇怪。有人能帮我找出问题吗?
我的目标是简单地将CSV文件加载到2D向量中,并能够像操作任何其他字符串一样操作字符串。这个初始CSV文件包含其他CSV文件的名称(没有.csv
扩展名),所以我最终想将.csv
添加到platforms.csv
中加载到platformsCSV
中的所有字符串中。
platforms.csv
的内容很简单:
PrestaShop
osCommerce
我得到的输出是:
PrestaShop
osCommerce
.csvtaShop
osCommerce.csv
这是我的代码:
#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <string>
using namespace std;
void readCSV(string &readFileName, vector< vector<string> > &output, int &colCount, int &rowCount)
{
fstream file(readFileName, ios::in);
if(!file.is_open())
{
cout << "File not found!nEnter correct file name: ";
cin >> readFileName;
}
colCount = 0, rowCount = 0;
string csvLine;
while( getline(file, csvLine) )
{
istringstream csvStream(csvLine);
vector<string> csvColumn;
string csvElement;
while( getline(csvStream, csvElement, ',') )
{
csvColumn.push_back(csvElement);
colCount++;
}
output.push_back(csvColumn);
rowCount++;
}
colCount=colCount/rowCount;
file.close();
}
void writeCSV(string &writeFileName, vector< vector<string> > &csvData, int &colCount, int &rowCount)
{
ofstream myfile;
myfile.open (writeFileName);
int x = 0, y = 0;
while(y<rowCount) {
x=0;
while (x<colCount-1) {
myfile << csvData[y][x] << ",";
x++;
}
myfile << csvData[y][x] << "n";
y++;
}
myfile.close();
}
int main()
{
int colCount, rowCount;
string platformsFile = "platforms.csv";
vector< vector<string> > platformsCSV;
readCSV(platformsFile, platformsCSV, colCount, rowCount);
cout << "n";
cout << "n" << platformsCSV[0][0];
cout << "n" << platformsCSV[1][0];
string x = platformsCSV[0][0] + ".csv";
string y = platformsCSV[1][0] + ".csv";
cout << "n";
// What's wrong here???
cout << "n" << x;
cout << "n" << y;
cout << "n";
return 0;
}
这不是C++代码的问题。这是CSV行末尾的问题。
如果我没有错的话,显然。
我已经复制了你的问题,得到
.csvtaShop
.csvmmerce
在linux平台中,文本文件中的行以LF(0x0a)结尾,使用dos行结尾的CSV文件(CR+LF,0x0d+0x0a)。
getline()
在csvElement
"Prestashop\x0d"answers"osCommerce\x0d"中加载,加载'\x0d'字符。
当我打印platformsCSV[0][0]
和platformsCSV[1][0]
时,我得到
PrestaShop
osCommerce
因为"\x0d"字符是不可见的。
我的x
和y
变为"PrestaShop\x0d.csv"answers"osCommerce\x0d.csv"。
打印x
、cout
时写"PrestaShop",然后是"\x0d"字符,即:转到行的左侧,然后是覆盖"Pres"的".cvs"部分。
与我的y
非常相似。
如果你得到
.csvtaShop
osCommerce.csv
我假设你在Linux(或Unix)平台上工作,你的CSV文件在第一行末尾以CR+LF结尾,但在第二行末尾没有行尾。
为了验证我的假设是否正确,你可以添加
for ( unsigned i = 0 ; i < x.size() ; ++i )
std::cout << '[' << int(x[i]) << ']';
std::cout << 'n';
在main()
结束时
我得到
[80][114][101][115][116][97][83][104][111][112][13][46][99][115][118]
其中"\x0d"是[13]
解决方案(如果我的假设是正确的):将CSV文件转换为unix文本文件。
抱歉我英语不好。
- 将二维矢量传递给类
- 将值从二维数组输出到文本文件
- 我在二维向量中是否正确分配了内存
- 带结构的二维矢量:如何存储元素
- 在二维数组中查找最小值和最大值?
- 移动二维数组中的字符
- C++ 传递二维字符数组
- 如何正确填充在堆上分配的二维数组?
- 传递二维数组时出现问题
- 具有随机数的二维数组不会更改
- 如何在C++中获取二维数组中最少的一列数?
- 如何使用用户输入变量制作二维数组?
- C++ 中的二维整数数组,每行中的元素数量不均匀
- C++ 中动态二维数组的访问冲突
- 在二维向量或数组中可以存储的最大元素数是多少?
- 如何将整数字符串转换为整数的二维向量?
- 二维矢量数据成员
- 如何在C++中将.csv文件的元素存储到二维向量中?
- C++将csv文件加载到二维矢量
- 读取二维数组在CSV到map++