访问 csv 文件时出现段错误
Segfault when accessing a csv file
前段时间我想从 CSV 文件中提取数据时在网上找到了以下代码,在它停止工作之前它工作得很好。它现在导致了一个让我发疯的段错误,因为我在 C++ 方面不是很有经验。我似乎无法找到此段错误的来源。帮助pleeeeeeeease。
我把函数放在一个头文件里面(头文件里面的定义也很简单明了)
值得一提的是,该代码在另一个文件夹中有效,但在我当前创建库的文件夹中无效,所有其他头文件 (类) 都在命名空间内创建(不确定如果这与此有关)。
这是头文件:
std::vector<std::vector<std::string> > getData(std::string fileName, std::string delimeter = ",")
{
std::ifstream file(fileName);
std::vector<std::vector<std::string> > dataList;
std::string line = "";
while (getline(file, line))
{
// my investigation led me here: code does not get to this point; it skips the while loop that is why the dataList remains empty
std::vector<std::string> vec;
boost::algorithm::split(vec, line, boost::is_any_of(delimeter));
dataList.push_back(vec);
}
file.close();
return dataList;
}
这是主要的
int main(){
int x{7};
Eigen::VectorXd X_step(x);
std::vector<Eigen::VectorXd> X;
std::vector<std::vector<std::string> > dataList = getData("MyFile.csv");
std::cout << "data list " << dataList[0][0] << "\n"; // dataList seems to be empty and also cout causes a segfault
for(std::vector<std::string> vec : dataList)
{
int j{0};
for(std::string data : vec)
{
X_step(j) = stod(data);
j++;
}
X.push_back(X_step);
}
}
非常感谢:)
很明显,文件甚至没有被打开。
为了确保文件被打开,csv 文件必须与可执行文件位于同一文件夹中,而不是与主文件位于同一文件夹中。
前段时间我想从 CSV 文件中提取数据时在网上找到了以下代码,在它停止工作之前它工作得很好。它现在导致了一个让我发疯的段错误,因为我在 C++ 方面不是很有经验。我似乎无法找到此段错误的来源。帮助pleeeeeeeease。
我把函数放在一个头文件里面(头文件里面的定义也很简单明了)
值得一提的是,该代码在另一个文件夹中有效,但在我当前创建库的文件夹中无效,所有其他头文件 (类) 都在命名空间内创建(不确定如果这与此有关)。
这是头文件:
std::vector<std::vector<std::string> > getData(std::string fileName, std::string delimeter = ",")
{
std::ifstream file(fileName);
std::vector<std::vector<std::string> > dataList;
std::string line = "";
while (getline(file, line))
{
// my investigation led me here: code does not get to this point; it skips the while loop that is why the dataList remains empty
std::vector<std::string> vec;
boost::algorithm::split(vec, line, boost::is_any_of(delimeter));
dataList.push_back(vec);
}
file.close();
return dataList;
}
这是主要的
int main(){
int x{7};
Eigen::VectorXd X_step(x);
std::vector<Eigen::VectorXd> X;
std::vector<std::vector<std::string> > dataList = getData("MyFile.csv");
std::cout << "data list " << dataList[0][0] << "\n"; // dataList seems to be empty and also cout causes a segfault
for(std::vector<std::string> vec : dataList)
{
int j{0};
for(std::string data : vec)
{
X_step(j) = stod(data);
j++;
}
X.push_back(X_step);
}
}
非常感谢:)
很明显,文件甚至没有被打开。 为了确保文件被打开,csv 文件必须与可执行文件位于同一文件夹中,而不是与主文件位于同一文件夹中。