最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++中實(shí)現(xiàn)保存數(shù)據(jù)到CSV文件

 更新時(shí)間:2023年08月04日 10:21:35   作者:熊叫大雄  
這篇文章主要介紹了C++中實(shí)現(xiàn)保存數(shù)據(jù)到CSV文件方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

C++保存數(shù)據(jù)到CSV文件

主要是今天工作的時(shí)候需要把一些數(shù)據(jù)保存到本地,因?yàn)槭且恍╊A(yù)測(cè)值和標(biāo)簽的對(duì)比,還有預(yù)測(cè)值的概率,所以想到用CSV文件來(lái)保存,大概查了一下,還是比較簡(jiǎn)單的,所以記錄一下。

首先要說(shuō)明的是CSV文件有點(diǎn)類(lèi)似excel文件,也可以用excel文件直接打開(kāi)的。在寫(xiě)數(shù)據(jù)到CSV文件的時(shí)候要注意,字符串逗號(hào)表示的是換列,換行符號(hào)就是換行,所以在寫(xiě)數(shù)據(jù)的時(shí)候要注意好這兩點(diǎn)就可以了。

然后寫(xiě)的時(shí)候也很簡(jiǎn)單,直接用C++的ofstream就可以實(shí)現(xiàn)了,ofstream有一個(gè)操作是"<<",這個(gè)也很好用,就類(lèi)似std::cout的操作一樣即可。

比如我現(xiàn)在的數(shù)據(jù)是比較統(tǒng)一的,每一個(gè)樣本是一行,一行數(shù)據(jù)要分成四列,第一列是樣本的圖像地址,第二列是標(biāo)簽,第三列是最終預(yù)測(cè)值,第四列是概率,每一列的格式是一樣的,那么我的代碼就是這樣:

ofstream file(CSV_PATH);
if (file)
{
? ? file << image_path << "," << label << "," << prediction << "," << probability << "\n";
}
file.close();

這樣就可以實(shí)現(xiàn)了,還是比較容易的。

C++對(duì)csv文件操作(讀、寫(xiě)、追加)

使用說(shuō)明:csv文件按照","進(jìn)行分隔。因此每個(gè)內(nèi)容中需避免出現(xiàn)","

1.讀csv文件

c++通過(guò)文件讀入方式打開(kāi)文件。即通過(guò)ifstream類(lèi)進(jìn)行打開(kāi)文件。

 
string fname = "test.csv";
//以讀入方式打開(kāi)文件
ifstream csv_data(fname, ios::in);
if (!csv_data.is_open())
{
	cout << "Error: opening file fail" << endl;
	exit(1);
}
else {
	string line;
	vector<string> words; //聲明一個(gè)字符串向量
	string word;
	// ------------讀取數(shù)據(jù)-----------------
	// 讀取標(biāo)題行
	getline(csv_data, line);
	istringstream sin;
	// 按行讀取數(shù)據(jù)
	while (getline(csv_data, line))
	{
		// 清空vector及字符串流,只存當(dāng)前行的數(shù)據(jù)
		words.clear();
		sin.clear();
		sin.str(line);
		//將字符串流sin中的字符讀到字符串?dāng)?shù)組words中,以逗號(hào)為分隔符
		while (getline(sin, word, ','))
		{
			cout << word << endl;
			words.push_back(word); //將每一格中的數(shù)據(jù)逐個(gè)push
		}
	}
	csv_data.close();
}

2.寫(xiě)入csv文件

c++通過(guò)文件寫(xiě)入方式打開(kāi)文件進(jìn)行寫(xiě)入。即通過(guò)ofstream類(lèi)進(jìn)行寫(xiě)入,并在打開(kāi)文件中指明ios::out。

說(shuō)明:默認(rèn)通過(guò)iso::out方式進(jìn)行寫(xiě)入,當(dāng)文件不存在時(shí)會(huì)進(jìn)行創(chuàng)建

string fname = "test.csv";
ofstream outFile(fname, ios::out);
// 寫(xiě)入標(biāo)題行
outFile << "name" << ','
<< "income" << ','
<< "expenditure" << ','
<< "addr" << endl;
// ********寫(xiě)入兩行數(shù)據(jù)*********
outFile << "zhangsan" << ','
<< "3000" << ','
<< "1200" << ','
<< "陜西省" << endl;
outFile << "lisi" << ','
<< to_string(2032.1) << ','
<< to_string(789.2) << ','
<< "北京市" << endl;
//數(shù)字需轉(zhuǎn)為字符串進(jìn)行寫(xiě)入,csv文件結(jié)束一行寫(xiě)入需要"\n"或者endl進(jìn)行換行
outFile.close();

3.向csv文件中追加內(nèi)容

與第2部分幾乎相同,只不過(guò)是打開(kāi)文件時(shí)選擇ios::app方式進(jìn)行。當(dāng)文件不存在時(shí)會(huì)進(jìn)行創(chuàng)建

ofstream outFile(fname, ios::app);
// ********寫(xiě)入兩行數(shù)據(jù)*********
outFile << "wangwu" << ','
	<< "1234" << ','
	<< to_string(12.32) << ','
	<< "河南省" << endl;
outFile << "lisi" << ','
	<< to_string(2032.1) << ','
	<< to_string(789.2) << ','
	<< "北京市" << endl;
//數(shù)字需轉(zhuǎn)為字符串進(jìn)行寫(xiě)入,csv文件結(jié)束一行寫(xiě)入需要"\n"或者endl進(jìn)行換行
outFile.close();

4.具體使用

4.1讀入csv文件

#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <string>
using namespace std;
void PrintCSVLine(vector<string> line_data)
{
	//此語(yǔ)法僅在C++11中適用
	for (string str : line_data)
	{
		cout << str << " ";
	}
	cout << endl;
}
//讀入csv文件
int main() {
	string fname = "test.csv";
	//以讀入方式打開(kāi)文件
	ifstream csv_data(fname, ios::in);
	if (!csv_data.is_open())
	{
		cout << "Error: opening file fail" << endl;
		exit(1);
	}
	else {
		string line;
		vector<string> words; //聲明一個(gè)字符串向量
		string word;
		// ------------讀取數(shù)據(jù)-----------------
		// 讀取標(biāo)題行
		getline(csv_data, line);
		istringstream sin;
		// 按行讀取數(shù)據(jù)
		while (getline(csv_data, line))
		{
			// 清空vector及字符串流,只存當(dāng)前行的數(shù)據(jù)
			words.clear();
			sin.clear();
			sin.str(line);
			//將字符串流sin中的字符讀到字符串?dāng)?shù)組words中,以逗號(hào)為分隔符
			while (getline(sin, word, ','))
			{
				//cout << word << endl;
				words.push_back(word); //將每一格中的數(shù)據(jù)逐個(gè)push
			}
			//輸出此行中的內(nèi)容
			PrintCSVLine(words);
		}
		csv_data.close();
	}
}

4.2寫(xiě)入csv文件

#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
	string fname = "test.csv";
	ofstream outFile(fname, ios::out);
	if (outFile.is_open())  // 檢查文件是否打開(kāi)成功
	{
		// 寫(xiě)入標(biāo)題行
		outFile << "name" << ','
			<< "income" << ','
			<< "expenditure" << ','
			<< "addr" << endl;
		// ********寫(xiě)入兩行數(shù)據(jù)*********
		outFile << "zhangsan" << ','
			<< "3000" << ','
			<< "1200" << ','
			<< "陜西省" << endl;
		outFile << "lisi" << ','
			<< to_string(2032.1) << ','
			<< to_string(789.2) << ','
			<< "北京市" << endl;
		//數(shù)字需轉(zhuǎn)為字符串進(jìn)行寫(xiě)入,csv文件結(jié)束一行寫(xiě)入需要"\n"或者endl進(jìn)行換行
		outFile.close();
	}
	else
	{
		cout << "文件無(wú)法打開(kāi)!" << endl;
	}
}
 

4.3向csv文件追加

#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
	string fname = "test.csv";
	//先判斷文件是否存在
	ifstream file(fname);
	if (!file.is_open()) {
		cout << "File does not exist!" << endl;
		return 1;
	}
	else {
		cout << "File exists!" << endl;
		file.close();//必須先關(guān)閉文件后才可寫(xiě)入
		ofstream outFile(fname, ios::app);
		// ********寫(xiě)入兩行數(shù)據(jù)*********
		outFile << "wangwu" << ','
			<< "1234" << ','
			<< to_string(12.32) << ','
			<< "河南省" << endl;
		outFile << "lisi" << ','
			<< to_string(2032.1) << ','
			<< to_string(789.2) << ','
			<< "北京市" << endl;
		//數(shù)字需轉(zhuǎn)為字符串進(jìn)行寫(xiě)入,csv文件結(jié)束一行寫(xiě)入需要"\n"或者endl進(jìn)行換行
		outFile.close();
	}
	return 0;
}
 

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • C/C++使用C語(yǔ)言實(shí)現(xiàn)多態(tài)

    C/C++使用C語(yǔ)言實(shí)現(xiàn)多態(tài)

    這篇文章主要介紹了C/C++多態(tài)的實(shí)現(xiàn)機(jī)制理解的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下,希望能給你帶來(lái)幫助
    2021-08-08
  • C語(yǔ)言常量介紹

    C語(yǔ)言常量介紹

    這篇文章介紹了C語(yǔ)言中的常量,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • C++ 類(lèi)的構(gòu)造函數(shù)詳解及實(shí)例

    C++ 類(lèi)的構(gòu)造函數(shù)詳解及實(shí)例

    這篇文章主要介紹了C++ 類(lèi)的構(gòu)造函數(shù)詳解及實(shí)例的相關(guān)資料,學(xué)習(xí)C++ 的朋友對(duì)構(gòu)造函數(shù)肯定不陌生,非常重要的基礎(chǔ)知識(shí),這里就詳細(xì)介紹下,需要的朋友可以參考下
    2016-12-12
  • C++中的friend友元函數(shù)詳細(xì)解析

    C++中的friend友元函數(shù)詳細(xì)解析

    友元可以是一個(gè)函數(shù),該函數(shù)被稱(chēng)為友元函數(shù);友元也可以是一個(gè)類(lèi),該類(lèi)被稱(chēng)為友元類(lèi)。友元函數(shù)的特點(diǎn)是能夠訪問(wèn)類(lèi)中的私有成員的非成員函數(shù)。友元函數(shù)從語(yǔ)法上看,它與普通函數(shù)一樣,即在定義上和調(diào)用上與普通函數(shù)一樣
    2013-09-09
  • C++ cin不同狀態(tài)詳細(xì)講解

    C++ cin不同狀態(tài)詳細(xì)講解

    cin是C++編程語(yǔ)言中的標(biāo)準(zhǔn)輸入流對(duì)象,即istream類(lèi)的對(duì)象。cin主要用于從標(biāo)準(zhǔn)輸入讀取數(shù)據(jù),這里的標(biāo)準(zhǔn)輸入,指的是終端的鍵盤(pán)。此外,cout是流的對(duì)象,即ostream類(lèi)的對(duì)象,cerr是標(biāo)準(zhǔn)錯(cuò)誤輸出流的對(duì)象,也是ostream類(lèi)的對(duì)象
    2022-10-10
  • VC++ 中ListCtrl經(jīng)驗(yàn)總結(jié)

    VC++ 中ListCtrl經(jīng)驗(yàn)總結(jié)

    這篇文章主要介紹了VC++ 中ListCtrl經(jīng)驗(yàn)總結(jié)的相關(guān)資料,需要的朋友可以參考下
    2015-06-06
  • QT實(shí)現(xiàn)QMessageBox中文按鈕示例詳解

    QT實(shí)現(xiàn)QMessageBox中文按鈕示例詳解

    這篇文章主要為大家詳細(xì)介紹了QT實(shí)現(xiàn)QMessageBox中文按鈕的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-11-11
  • C語(yǔ)言中野指針和空指針的區(qū)別

    C語(yǔ)言中野指針和空指針的區(qū)別

    本文主要介紹了野指針和空指針的概念、用途、原理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-11-11
  • C++內(nèi)存序的操作方法

    C++內(nèi)存序的操作方法

    在C++中,內(nèi)存序(Memory Order)是一個(gè)非常重要的概念,特別是在多線程編程中,本文通過(guò)實(shí)例代碼介紹C++內(nèi)存序的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2025-11-11
  • C++ 設(shè)置和獲取當(dāng)前工作路徑的實(shí)現(xiàn)代碼

    C++ 設(shè)置和獲取當(dāng)前工作路徑的實(shí)現(xiàn)代碼

    這篇文章主要介紹了C++ 設(shè)置和獲取當(dāng)前工作路徑的實(shí)現(xiàn)代碼,防止DLL加載不到配置和文件,需要的朋友可以參考下
    2017-09-09

最新評(píng)論

五家渠市| 安陆市| 巨野县| 海淀区| 正阳县| 津市市| 隆化县| 麦盖提县| 怀集县| 长垣县| 安达市| 庆城县| 蒙山县| 呼玛县| 阿巴嘎旗| 花莲市| 太康县| 泾源县| 新密市| 新余市| 大宁县| 天全县| 简阳市| 湖南省| 望江县| 定南县| 中西区| 兰溪市| 桃源县| 商都县| 上饶县| 商丘市| 四子王旗| 文化| 新巴尔虎左旗| 封开县| 微山县| 阿荣旗| 崇州市| 南部县| 体育|