1. 程式人生 > >C++讀CSV文件,處理數據

C++讀CSV文件,處理數據

system bsp 類型變量 sstream 之間 end ror 文件 site

//讀寫

#include "global.h"
#include <iostream>
#include <fstream> //讀取文件數據的函數fin的頭文件
#include <sstream> //istringstream 必須包含這個頭文件

using namespace std;
using std::ofstream;
vector<AQIvalue> allSites;
vector<WENDUvalue> allWD;


//模板函數:將string類型變量轉換為常用的數值類型(此方法具有普遍適用性)
template <class Type>
Type stringToNum(const string str){
istringstream iss(str);
Type num;
iss >> num;
return num;
}

int ReadWENDU(const string siteFile)
{
string value;
ifstream fin;
fin.open(siteFile, ios::in);
if (!fin.is_open())
{
cout << "read file error: " << siteFile << endl;
}

getline(fin, value); //讀取文件的一行

int cnt = 0;

while (fin.good())//判斷文件是否打開
{
cnt++;
string Anum,Aname,Acity,Ajindu,Aweidu,WENDU1, SHIDU1, FENGSU1, WENDU2, SHIDU2, FENGSU2, WENDU3, SHIDU3, FENGSU3, WENDU4, SHIDU4, FENGSU4 ;
//string WENDU1, WENDU2, WENDU3, WENDU4, SHIDU1, SHIDU2, SHIDU3, SHIDU4, FENGSU1, FENGSU2, FENGSU3, FENGSU4;
WENDUvalue B_SITE;

getline(fin, Anum, ‘,‘);
B_SITE.Anum = Anum;
getline(fin, Aname, ‘,‘);
B_SITE.Aname = Aname;
getline(fin, Acity, ‘,‘);
B_SITE.Acity = Acity;
getline(fin, Ajindu, ‘,‘);
B_SITE.Ajindu = stringToNum<float>(Ajindu);
getline(fin, Aweidu, ‘,‘);
B_SITE.Aweidu = stringToNum<float>(Aweidu);

getline(fin, WENDU1, ‘,‘);
B_SITE.wendu3 = stringToNum<float>(WENDU1);
getline(fin, WENDU2, ‘,‘);
B_SITE.shidu3 = stringToNum<float>(WENDU2);
getline(fin, WENDU3, ‘,‘);
B_SITE.fengsu3 = stringToNum<float>(WENDU3);

getline(fin, SHIDU1, ‘,‘);
B_SITE.wendu4 = stringToNum<float>(SHIDU1);
getline(fin, SHIDU2, ‘,‘);
B_SITE.shidu4 = stringToNum<float>(SHIDU2);
getline(fin, SHIDU3, ‘\n‘);
B_SITE.fengsu4 = stringToNum<float>(SHIDU3);
allWD.push_back(B_SITE);
}
fin.close();
fin.clear();
return 0;
}

int ReadAQI(const string siteFile)
{

string value;
ifstream fin;

fin.open(siteFile, ios::in);
if (!fin.is_open())
{
cout << "read file error: " << siteFile << endl;
}

//getline(fin, value); //讀取文件的一行

int cnt = 0;

while (fin.good())//判斷文件是否打開
{
cnt++;
//cout << "cntAQI: " << cnt << endl;//總共多少個數
//system("pause");
string v1, v2, v3, v4,v5,v6;
AQIvalue A_SITE;

getline(fin, v1, ‘,‘);
A_SITE.value1 = stringToNum<float>(v1);
getline(fin, v2, ‘,‘);
A_SITE.value2 = stringToNum<float>(v2);
getline(fin, v3, ‘,‘);
A_SITE.value3 = stringToNum<float>(v3);
getline(fin, v4, ‘,‘);
A_SITE.value4 = stringToNum<float>(v4);
getline(fin, v5, ‘,‘);
A_SITE.value5 = stringToNum<float>(v5);
getline(fin, v6, ‘\n‘);
A_SITE.value6 = stringToNum<float>(v6);

allSites.push_back(A_SITE);
}
fin.close();
fin.clear();

return 0;
}

int main(int argc, char* argv[])
{
cout << "fuck";
ReadWENDU("site_Temperature_SpeHumidity_2015_1_1_6.csv");
int biaoji[1500];
float outdata[2000][2000];
for (int i = 0; i < 1497; i++)
{
biaoji[i] = 0; //存取城市之間距離
}

for (int i = 0; i < 1497; i++)
{
for (int j = 0; j < 1497; j++)
{
outdata[i][j] = sqrtf((allWD[i].Ajindu-allWD[j].Ajindu)*(allWD[i].Ajindu - allWD[j].Ajindu)+ (allWD[i].Aweidu - allWD[j].Aweidu)*(allWD[i].Aweidu - allWD[j].Aweidu)); //存取城市之間距離
}
}


//ofstream outFile;
//outFile.open(data, ios::out);
//for (int i = 0; i < wholenum; i++)
//{
// for (int j = 1; j < 6; j++)
// {
// outFile << data[i][j] << ‘,‘;
// }
// outFile << data[i][6] << endl;
//}
//outFile.close();
allWD.clear();
allSites.clear();
return 0;
}

C++讀CSV文件,處理數據