Arrays 如何将逗号分隔的文本文件读入数组

Arrays 如何将逗号分隔的文本文件读入数组,arrays,fstream,delimiter,comma,c-strings,Arrays,Fstream,Delimiter,Comma,C Strings,我一直在这个项目的工作,并一直在阅读文本文件之间只有空格,而不是逗号,所以我需要更新我如何读取到数组中的文件。我尝试过使用stringstream()和getline(),但没有成功。有人知道如何将此文件读入数组吗 我以前就是这样做的 void readData(ifstream& inputFile, double lat[], double lon[], double yaw[], int& numLines) { // Read in headers. string hea

我一直在这个项目的工作,并一直在阅读文本文件之间只有空格,而不是逗号,所以我需要更新我如何读取到数组中的文件。我尝试过使用stringstream()和getline(),但没有成功。有人知道如何将此文件读入数组吗

我以前就是这样做的

void readData(ifstream& inputFile, double lat[], double lon[], double yaw[], int& numLines)
{
// Read in headers.
string header;
getline(inputFile, header);

// Read in data and store in arrays.
for (int i = 0; i < numLines; i++)
{
    if (inputFile >> lat[i])
    {
        inputFile >> lon[i];
        inputFile >> yaw[i];
    }
}

如果有人能指出正确的方向那就太好了。谢谢

您需要将这些逗号提取到char类型的变量:

std::ifstream f("d:\\temp\\z.txt");
string s;
double lat, lon, alt, asc, speed, dist, max;
vector<double> lat_vec, lon_vec, asc_vec, speed_vec, dist_vec, max_vec;
char c;
while (!f.eof()) {
    f>>s; // get one line
    stringstream st(s);
    // below, eat first number, then comma, then second number, etc.
    if (st>>lat>>c>>lon>>c>>alt>>c>>asc>>c>>speed>>c>>dist>>c>>max) {
        lat_vec.push_back(lat); lon_vec.push_back(lon);
        asc_vec.push_back(asc); speed_vec.push_back(speed);
        dist_vec.push_back(dist); max_vec.push_back(max);
    }
}
// if you really need arrays, not vectors
double *dist_ar = new double[dist_vec.size];
for (int i=0;i<dist_vec.size(); i++)
    dist_ar[i]=dist_vec[i];
return 0;
std::ifstream f(“d:\\temp\\z.txt”);
字符串s;
双纬度、经度、高度、asc、速度、距离、最大值;
矢量横向矢量、纵向矢量、横向矢量、横向矢量、横向矢量、横向矢量、横向矢量、横向矢量、横向矢量;
字符c;
而(!f.eof()){
f> >s;//获取一行
横溪街(s);
//下面,吃第一个数字,然后逗号,然后第二个数字,等等。
如果(st>>lat>>c>>lon>>c>>alt>>c>>asc>>c>>speed>>c>>dist>>c>>max){
横向向后推(横向);纵向向后推(纵向);
asc向后推(asc);速度向后推(速度);
距离向量向后推(距离);最大向量向后推(最大);
}
}
//如果你真的需要数组,而不是向量
double*dist_ar=新的double[dist_向量大小];

对于(int i=0;i可能重复的)我看了另一个问题,它对我有点帮助,但我仍然不知道如何排除一些数据,因为我只需要纬度、经度、高度(英尺)、速度(英里/小时)、gps、功率、俯仰、横滚、偏航和马达on@iAmTheDank:您可以使用String.split(“,”)分割传入的信息。但是,如果您碰巧有“I,John Carpenter”或其他带有逗号的字符串,则会将其分割错误。您的数据不正确,因此您应该是安全的。这将为您将所有内容都放入一个数组中。因此,您只需保留所需内容,其余内容将被丢弃(或者只是将所有内容存储到一个数组中)。不过,感谢您的帖子,我需要它们进入数组。数组是如何排列的?是否有一个数组表示纬度、一个数组表示经度等?在任何情况下,如果您有一维数组,您可以执行st>>ar[0]>>c>>ar[1]>>c…等等。如果你不知道维度,你可以用vector来代替,并在读取时将值推回。是的,每个数组有一个数组,因此我总共有10个。请参阅上面的新版本。谢谢!现在唯一的问题是如何读取第一行中有多个逗号的内容?你的示例使用f>>s和stingstream,但当我输出s时,我仍然看到commas
std::ifstream f("d:\\temp\\z.txt");
string s;
double lat, lon, alt, asc, speed, dist, max;
vector<double> lat_vec, lon_vec, asc_vec, speed_vec, dist_vec, max_vec;
char c;
while (!f.eof()) {
    f>>s; // get one line
    stringstream st(s);
    // below, eat first number, then comma, then second number, etc.
    if (st>>lat>>c>>lon>>c>>alt>>c>>asc>>c>>speed>>c>>dist>>c>>max) {
        lat_vec.push_back(lat); lon_vec.push_back(lon);
        asc_vec.push_back(asc); speed_vec.push_back(speed);
        dist_vec.push_back(dist); max_vec.push_back(max);
    }
}
// if you really need arrays, not vectors
double *dist_ar = new double[dist_vec.size];
for (int i=0;i<dist_vec.size(); i++)
    dist_ar[i]=dist_vec[i];
return 0;