我正在尝试使用c ++从CSV文件中将十六进制值读入二维数组。我比较新,所以我可以帮忙。
我想跳过前98行(主要由文本组成),然后从文件中读取接下来的100行。有22个逗号分隔列,我只需要第8,10和13-20列。第8列包含一个字符串,其余包含十六进制值。
以下是我所拥有的。它编译(不知何故)但我不断收到分段错误。我想我需要为数组动态分配空间。此外,代码不考虑字符串或int到十六进制转换。
主要目前没有做任何事情,这只是来自测试套件。
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <sstream>
#include <stdlib.h>
const int ROWS = 100; // CAN messages
const int COLS = 22; // Colums per message
const int BUFFSIZE = 80;
using namespace std;
int **readCSV() {
int **array = 0;
std::ifstream file( "power_steering.csv" );
std::string line;
int col = 0;
int row = 0;
if (!file.is_open())
{
return 0;
}
for (int i = 1; i < 98; i++){
std::getline(file, line); // skip the first 98 lines
}
while( std::getline( file, line ) ) {
std::istringstream iss( line );
std::string result;
while( std::getline( iss, result, ',' ) ) {
array[row][col] = atoi( result.c_str() );
col = col+1;
}
row = row+1;
col = 0;
}
return array;
}
int main() {
int **array;
array = readCSV();
for (int i = 0; i < 100; i++) {
cout<<array[i][0];
}
return 0;
}
答案 0 :(得分:2)
由于您尝试在array[row][col]
中存储值而未为array
分配内存,因此出现了分段错误错误。
我的建议:不要使用int** array;
。请改用std::vector<std::vector<int>> array;
。这样就不需要为代码中的对象分配和释放内存。让std::vector
为您处理内存管理。
std::vector<std::vector<int>> readCSV() {
std::vector<std::vector<int>> array;
std::ifstream file( "power_steering.csv" );
std::string line;
if (!file.is_open())
{
return array;
}
for (int i = 1; i < 98; i++){
std::getline(file, line); // skip the first 98 lines
}
while( std::getline( file, line ) ) {
std::istringstream iss( line );
std::string result;
std::vector<int> a2;
while( std::getline( iss, result, ',' ) ) {
a2.push_back(atoi( result.c_str() ));
}
array.push_back(a2);
}
return array;
}
int main() {
std::vector<std::vector<int>> array = readCSV();
for (int i = 0; i < 100; i++) {
cout<<array[i][0];
}
return 0;
}