0
struct LLGM{
  float Lat;
  float Long;
};

int main ()
{
 string Filename;
 int count = 0;
 string value;
 string temp;
 ifstream infile2;
 Filename = "LLMGReadingsv2.csv";
 infile2.open(Filename); 

 if(infile2.fail())
 {
    cout << "Error opening file" << endl;
    exit(1);
 }

 while(!infile2.eof())
 {
    getline(infile2, temp, ',');
    count++;
 }

 cout << count << endl;

 cout << endl;

 infile2.close();

 ifstream infile;

 infile.open(Filename);

 LLGM *points;
 points = new LLGM [count];

 for (int i = 0; i < count; i++)
 {
    infile >> points[i].Lat;
    infile >> points[i].Long; 

    cout << points[i].Lat;
    cout << points[i].Long;
 }

 cout << endl;

 return 0;
}

我的问题是,如何将从 CSV 文件中读取的值分配给各个变量?

例如:

35.123445,-85.888762(文件中一行的值) 我希望逗号前的第一个数字是纬度,第二个值是经度。

任何帮助将不胜感激!

4

1 回答 1

0

您可以创建自己的std::ctype构面,将逗号字符解释为分隔符。然后您可以将它灌输到您的文件流中并将该流的内容插入到数组中。

#include <iostream>
#include <locale>
#include <sstream>

struct my_facet : std::ctype<wchar_t>
{
    bool do_is(mask m, char_type c) const
    {
        if ((m & space) && c == L' ') {
            return false;
        }
        if ((m & space) && c == L',')
        {
            return true;
        }
        return ctype::do_is(m, c);
    }
};

int main()
{
    std::wifstream infile(Filename);
    infile.imbue(std::locale(infile.getloc(), new my_facet));

    for (int i = 0; i < count; ++i)
    {
        if ((infile >> points[i].Lat) && (infile >> points[i].Long)) 
        {
            std::wcout << points[i].Lat;
            std::wcout << points[i].Long;
        }
    }
}

这是一个使用 astringstream而不是文件的演示(仅用于演示目的)。

于 2013-06-20T20:58:38.303 回答