C++读取txt数据为二维数组 将数据保存到txt文本中
C++读取txt数据为二维数组 保存txt文本数据
#include <fstream>
ofstream //文件写操作 内存写入存储设备
ifstream //文件读操作,存储设备读区到内存中
fstream //读写操作,对打开的文件可进行读写操作
//对于type array[A][B];形式的二维数组,可以通过计算sizeof获取行列数。
sizeof(array[0][0])//为一个元素占用的空间,
sizeof(array[0]) //为一行元素占用的空间,
sizeof(array) //为整个数组占用的空间,
行数 = sizeof(array)/sizeof(array[0]);
列数 = sizeof(array[0])/sizeof(array[0][0]);
#include <iostream>
using namespace std;
template <class T>
int getArrayLen(T& array) //使用模板定义一个函数getArrayLen,该函数将返回数组array的长度
{
return (sizeof(array) / sizeof(array[0]));
}
int main()
{
char a[] = {'1','2','3'};
cout << getArrayLen(a) << endl;
return 0;
}
输出为3
【1】C++读取txt数据为二维数组
imageData.txt文本的数据如下:
10.0 25 30
100 200 1000
1 2 31 2 3
C++读取imageData.txt文本的数据,并将数据转存为二维数组的方法
#include "stdafx.h"
#include <iostream>
#include <cstring>
#include <io.h>
#include <fstream>
using namespace std;//txt文本必须是txtRows行,txtCols列存储的文本数据
#define readDataPath "D:\\imageData.txt"//txt文本的路径
#define txtRows 4 //txt行数
#define txtCols 3 //txt列数
int main()
{float txtData[txtRows][txtCols];int i, j;FILE* fp = fopen(readDataPath, "r"); //打开文件 if (fp == NULL){printf("文件读取错误...");return -1;}for (i = 0; i < txtRows; i++){for (j = 0; j < txtCols; j++){fscanf(fp, "%f", &txtData[i][j]);/*每次读取一个数,fscanf函数遇到空格或者换行结束*/}fscanf(fp, "\n");}fclose(fp);for (i = 0; i < txtRows; i++){for (j = 0; j < txtCols; j++){printf("%.1f ", txtData[i][j]);//输出 }printf("\n");}return 0;
}
运行结果:
【2】读取txt文本中的字符
imageName.txt文本的数据如下:
1.jpg
2.jpg
3.jpg
C++读取方法如下:
// CppPython.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"
#include <fstream>
#include <string>
#include <iostream>
using namespace std;//txt文本每行存储一个字符串
#define readDataPath "D:\\imageName.txt" //txt文本的路径
int main()
{ifstream txtStream(readDataPath);string line;if (!txtStream.is_open())cout << "Error opening file";//(1)推荐这个写法while (getline(txtStream, line)) // line中不包括每行的换行符{cout << line << endl;}//(2)使用eof()判断,会多出一行空的while (!txtStream.eof()){getline(txtStream, line);cout << line << endl;}//或者用字符数组存储char buffer[256];while (!txtStream.eof())//eof():如果读文件到达文件末尾,返回true。{txtStream.getline(buffer, 100);cout << buffer<< endl;}return 0;
}
【3】txt文本复杂的情况
假设data.txt的数据如下: 每行是一个样本,每行的第1列是一个字符串,其余是整型的数据
1.jpg 11 12 13 14 15
2.jpg 1 2 3 4 5
3.jpg 111 121 131 141 151
这里把第1列的字符串保存在vector中,其余数据保存在二维数组data中,C++实现代码如下:
#include <fstream>
#include <string>
#include "vector"
#include <iostream>
using namespace std;//txt文本的路径
#define readDataPath "D:\\MyGitPro\\imageData\\data.txt"
#define txtRows 3//txt文本行数
#define txtCols 6//txt文本列数struct fileData
{vector<string> name;//第1列int data[txtRows][txtCols - 1];//保存txt文本的数据(第2列开始)
};fileData loadFileData(char* path);int main()
{fileData m_fileData = loadFileData(readDataPath);for (int i = 0; i < m_fileData.name.size(); i++){cout << m_fileData.name.at(i) << endl;}int data[txtRows][txtCols - 1];memcpy(data, m_fileData.data, sizeof(data));for (size_t row=0;row<txtRows;row++){for (size_t col = 0; col < txtCols - 1; col++){cout << data[row][col]<<",";}cout << endl;}
}fileData loadFileData(char* path) {fileData m_fileData;char name[81];std::vector<string> v_name;int txtData[txtRows][txtCols - 1];int i, j;FILE* fp = fopen(path, "r"); //打开文件 if (fp == NULL){printf("文件读取错误...");return m_fileData;}for (i = 0; i < txtRows; i++){for (j = 0; j < txtCols; j++){if (j == 0){fscanf(fp, "%s", name);v_name.push_back(name);}else {fscanf(fp, "%d", &txtData[i][j - 1]);/*每次读取一个数,fscanf函数遇到空格或者换行结束*/}}fscanf(fp, "\n");}fclose(fp);memcpy(m_fileData.data, txtData, sizeof(m_fileData.data));m_fileData.name = v_name;return m_fileData;
}
【4】C++将数据保存到txt文本中
#include "stdafx.h"
#include <fstream>
#include <string>
#include "vector"
#include <iostream>
using namespace std;//txt文本保存的路径
#define writeDataPath "D:\\imageName.txt"
int main()
{fstream fout(writeDataPath);//这里采用构造方法,也可以使用open()方法vector<string> imageName;imageName.push_back("1.jpg");imageName.push_back("2.jpg");imageName.push_back("3.jpg");for (int i = 0; i < imageName.size(); i++){fout << imageName.at(i) << endl;}cout << "数据保存完毕..." << endl;
}
上面的是覆盖保存方法,若想在原文末尾加上新数据,只需要在fstream 的构造方法或者open()的第二个参数传入
ios::app即可,如:
fstream fout;fout.open(writeDataPath , ios::app);
下面给出一个函数:
void writeDatatxt(string path, string data,bool bCover) {//fstream fout(path, ios::app);fstream fout;if (bCover){fout.open(path);//默认是:ios_base::in | ios_base::out}else{fout.open(path, ios::app);//所有写入附加在文件末尾}//fstream fout(path);fout << data << endl;fout.flush();fout.close();
}
C++读取txt数据为二维数组 将数据保存到txt文本中相关推荐
- xlsx.full.js读取Excel数据转换成二维数组,sheet_to_array
xlsx.full.js读取Excel的sheet数据转换成二维数组,sheet_to_array 解析sheet数据为二维数组 测试方法 效果 鉴于js-xlsx.js没有XLSX.util.she ...
- java二维数组存储数据,从键盘上录入学生人数,考试科目数,以及每个学生每科分数,输出每个学生的最高分、最低分、总分、平均分
java二维数组存储数据,从键盘上录入学生人数,考试科目数,以及每个学生每科分数,输出每个学生的最高分.最低分.总分.平均分 import java.util.Scanner;/* * 二维数组存储数 ...
- c#读取图片成rgb二维数组
全栈工程师开发手册 (作者:栾鹏) c#教程全解 c#读取图片成rgb二维数组,输入图片文件地址,输出颜色二维数组 测试代码 static void Main() {Color[,] allcolor ...
- java读取图片成rgb二维数组
全栈工程师开发手册 (作者:栾鹏) java教程全解 java读取图片成rgb二维数组 测试代码 public static void main(String[] args) {Color[][] a ...
- node + ts读取csv文件为二维数组
node + TypeScript读取csv文件为二维数组 CSDN用户名:jcLee95 邮箱:291148484@163.com 原创不易,感谢点赞支持. 在数据分析的时候经常需要读取csv格式的 ...
- 实现从淘宝(天猫)定时抓取订单数据、打印电子面单并保存到ERP表中
实现从淘宝(天猫)定时抓取订单数据.打印电子面单并保存到ERP表中 前言 实现思路 代码片段参考 前言 最近有厂商提出想把天猫店铺的数据拿到后台ERP管理系统中,并能实现线下打印电子面单功能.接手这个 ...
- python读取文件中的数据为二维数组变量_Numpy 多维数据数组的实现
numpy包(模块)几乎总是用于Python中的数值计算.这个软件包为Python提供了高性能的向量.矩阵.张量数据类型.它是在C和Fortran中创建的,因此当计算被矢量化(用矩阵和矢量表示操作)时 ...
- 将pandas中Dataframe数据转换为二维数组array
在实际的数据处理中,遇到将pandas中Dataframe的数据怎样去掉行列标签的问题,最后想到可以转化为二维数组来解决.思路如下: 一个Dataframe如下: pd: age astigmatic ...
- java二维数组添加数据_Java自学路线图
目前Java在许多行业的客户端方面的应用非常多,比如OA.邮箱.投票.金融.考试.物流.医疗.矿山等信息方面的系统.Java开发者在这方面的需求也非常大,待遇也相当不错,工资水平可能和Java互联网方 ...
最新文章
- HTML的标签描述13
- 二进制状态压缩相关操作
- CF585E-Present for Vitalik the Philatelist【莫比乌斯反演,狄利克雷前缀和】
- 何时使用JavaFX代替HTML
- 团队的远程管理_不管理远程团队的7种方法
- python db2 linux 安装,python安装DB2模块
- html页面获取时间格式,js实现动态获取系统时间,显示到页面上
- 点击选中框 批量删除
- tiobe编程语言排名_排名前20位的编程语言:GitHut和Tiobe排名
- react 之 prop-types
- jpeg图像质量参数及icc信息提取
- 取字符串拼音首字母(js)
- 2022年地图产业研究报告
- 个人成长:谈谈工作之余如何提高个人技术水平
- 电脑定时关机、取消定时关机、滑动关机
- vue请求进度条效果
- 2023年电气,电子与信息工程国际会议(ISEEIE-2023)
- dns 解析,一个域名解析到多个ip地址
- 泛泰binx一键式离线刷机(可断网刷机,可刷任意版本)(官网脚本更新7.30)
- Java基础——LinkedList源码分析