1. 程式人生 > >C++讀寫檔案相關(包括一行行讀取資料,讀取每一行資料的第一個數)的函式

C++讀寫檔案相關(包括一行行讀取資料,讀取每一行資料的第一個數)的函式

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);
	}
}