C++讀寫檔案相關(包括一行行讀取資料,讀取每一行資料的第一個數)的函式
阿新 • • 發佈:2019-02-06
1.setprecision()函式的使用及標頭檔案?
2.利用getline()怎麼讀取一行資料,換行符是否讀入了?
3.怎麼使用串流實現對string字串的輸入輸出?
寫資料到txt檔案
//其中的setprecision()函式在標頭檔案iomanip 中 void WriteBeamCoreToFile(string fileName, vector<Point2f> pCenters) { ofstream outFile; outFile.open(fileName); int nPointsNum = pCenters.size(); for (int i = 0; i < nPointsNum; i++) { outFile << fixed << setprecision(5) << pCenters[i].x << " " << pCenters[i].y << "\n"; } outFile.close(); }
讀資料到變數,一行一行的讀取(靈活):
bool CBeamCore::CalActualDis(Mat srcImg, Point2f& pCenter, string calibrateFile, double & dActualDis, Mat& imgShow) { CalCore(srcImg, pCenter, imgShow); double dX = pCenter.x; CubicSplineInterpolation cubicSpline; //讀取多項式資訊 CubicSplineCoeffs *cubicCoeffs; vector<double> dBeamsX; ifstream inFile(calibrateFile); int i = 0; while (!inFile.eof()) { string buffTmp; double dTmp = 0.0; getline(inFile, buffTmp);//讀取第一行 stringstream stringIn(buffTmp);//使用串流實現對string的輸入輸出操作 while (stringIn >> dTmp) dBeamsX.push_back(dTmp); cubicCoeffs = new CubicSplineCoeffs(dBeamsX.size() - 1); //讀取後續行 buffTmp.clear(); int nCoeffIndex = 0; while (getline(inFile, buffTmp)) { stringstream stringCoeffs(buffTmp); vector<double> abcdTmp; while (stringCoeffs >> dTmp) abcdTmp.push_back(dTmp); cubicCoeffs->a[nCoeffIndex] = abcdTmp[0]; cubicCoeffs->b[nCoeffIndex] = abcdTmp[1]; cubicCoeffs->c[nCoeffIndex] = abcdTmp[2]; cubicCoeffs->d[nCoeffIndex] = abcdTmp[3]; nCoeffIndex++; } } inFile.close(); if (!cubicSpline.cubicSplineInterpolation2(cubicCoeffs, dBeamsX, dX, dActualDis)) return false; return true; }
讀取每一行資料的第一個數
void ReadFirtNum(string fileName, vector<int>& data) { ifstream inFile; inFile.open(fileName,ios::in); if(!inFile.is_open())//判斷檔案是否開啟 { cout<<"Error opening file" << endl; } while(!inFile.eof()) { int num; string sTmp; inFile >> num; getline(inFile, sTmp);//略過第一行 data.push_back(num); } }