C++写csv文件

本文介绍了如何使用C++编写函数`intwritelog`,将一组double类型的值以逗号分隔的形式写入到指定的CSV文件中,包括时间戳的格式化和文件操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C++写csv文件

其中有一个点需要注意,csv芬里尔之间要用逗号隔开

p_str_filename ="D:\\1.csv";
int writelog(string p_str_filename, double p_double[])
{
	SYSTEMTIME timeCur;
	GetLocalTime(&timeCur);
	char t_logbuffer[1024] = { 0 };
	sprintf(t_logbuffer, ("%04d%02d%02d_%02d:%02d:%02d:%03d,")
		, timeCur.wYear, timeCur.wMonth, timeCur.wDay
		, timeCur.wHour, timeCur.wMinute, timeCur.wSecond, timeCur.wMilliseconds);
	char tep[1024] = { 0 };
	sprintf(tep, ("%02f,%02f,%02f,%02f,%02f\n"), p_double[0], p_double[1], p_double[2], p_double[3], p_double[4]);

	strcat(t_logbuffer, tep);
	t_logbuffer[1024 - 1] = '\0';
	FILE* FP = fopen(p_str_filename.c_str(), "a+");
	if (FP == NULL)
	{
		return -1;
	}
	fwrite(t_logbuffer, 1, strlen(t_logbuffer), FP);
	fclose(FP);
	return 0;
}
### 如何使用 C++ CSV 文件C++ 中,`std::ofstream` 是一种常用的方式用来向文件写入数据。下面是一个完整的示例代码展示如何将结构化数据保存到 CSV 文件中。 #### 示例代码 ```cpp #include <iostream> #include <fstream> #include <string> #include <vector> #include <tuple> void writeCSV(const std::string& filename, const std::vector<std::tuple<std::string, int, double>>& data) { // 创建并打开一个输出文件流对象 std::ofstream csv_file(filename); if (!csv_file.is_open()) { std::cerr << "无法打开文件:" << filename << std::endl; return; } // 写入表头 csv_file << "姓名,年龄,分数\n"; // 遍历数据并将每一行写入文件 for (const auto& row : data) { csv_file << std::get<0>(row) << "," << std::get<1>(row) << "," << std::get<2>(row) << "\n"; } // 关闭文件 csv_file.close(); } int main() { // 准备要写入的数据 std::vector<std::tuple<std::string, int, double>> records = { {"张三", 25, 87.5}, {"李四", 30, 92.0}, {"王五", 22, 76.3} }; // 调用函数写入CSV文件 writeCSV("example.csv", records); std::cout << "CSV 文件已成功生成!" << std::endl; return 0; } ``` 此代码展示了如何定义一个 `writeCSV` 函数来接受文件名和一组元组形式的数据,并将其转换成逗号分隔的形式存储至指定的 CSV 文件中[^1]。 对于更复杂的情况,比如需要处理大量数据或者特殊字符(如逗号本身作为字段的一部分),则需额外注意转义逻辑。例如,在某些情况下,如果某个字段包含逗号,则应将该字段用双引号括起来[^2]。 另外需要注意的是,虽然可以通过编程实现多个工作表的效果,但实际上标准的 CSV 文件并不支持 “sheets” 的概念;因此所有的数据都只会被存放在单一的工作表里[^2]。 #### 特殊情况下的处理方法 当遇到含有特殊字符(如逗号、双引号等)时,可以采用如下方式解决: - 如果字段中含有逗号 `,` 或换行符 `\n` ,需要用双引号 `" "` 将整个字段包围。 - 若字段本身就包含了双引号 `"` ,那么这些双引号应当加倍表示,即变为两个连续的双引号 `""` [^3]。 以下是改进后的版本以应对这种情况: ```cpp #include <iomanip> // ... 继续之前的代码 ... for (const auto& row : data) { std::ostringstream oss_name, oss_age, oss_score; formatField(oss_name, std::get<0>(row)); formatField(oss_age, std::get<1>(row)); formatField(oss_score, std::get<2>(row)); csv_file << "\"" << oss_name.str() << "\"," << "\"" << oss_age.str() << "\"," << "\"" << oss_score.str() << "\"\n"; } inline void formatField(std::ostringstream& stream, const std::string& value){ bool needsQuotes = false; size_t pos = value.find_first_of(",\""); if(pos != std::string::npos || !value.empty()){ needsQuotes=true; } if(needsQuotes){ stream << '"'; } for(char c:value){ if(c=='"')stream<<'"'; stream<<c; } if(needsQuotes){ stream << '"'; } } // ... 结束 ... ``` 以上代码片段增加了对特殊字符的支持能力,使得程序能够更加健壮地面对各种输入场景[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值