C++读取txt数据为二维数组 保存txt文本数据

    C++文件读写操作有:ofstream,ifstream,fstream:
#include <fstream>
ofstream         //文件写操作 内存写入存储设备
ifstream         //文件读操作,存储设备读区到内存中
fstream          //读写操作,对打开的文件可进行读写操作
   详细资料请参考:http://blog.csdn.net/kingstar158/article/details/6859379
   C++获取二维数组的行列数的方法:
//对于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文本中相关推荐

  1. xlsx.full.js读取Excel数据转换成二维数组,sheet_to_array

    xlsx.full.js读取Excel的sheet数据转换成二维数组,sheet_to_array 解析sheet数据为二维数组 测试方法 效果 鉴于js-xlsx.js没有XLSX.util.she ...

  2. java二维数组存储数据,从键盘上录入学生人数,考试科目数,以及每个学生每科分数,输出每个学生的最高分、最低分、总分、平均分

    java二维数组存储数据,从键盘上录入学生人数,考试科目数,以及每个学生每科分数,输出每个学生的最高分.最低分.总分.平均分 import java.util.Scanner;/* * 二维数组存储数 ...

  3. c#读取图片成rgb二维数组

    全栈工程师开发手册 (作者:栾鹏) c#教程全解 c#读取图片成rgb二维数组,输入图片文件地址,输出颜色二维数组 测试代码 static void Main() {Color[,] allcolor ...

  4. java读取图片成rgb二维数组

    全栈工程师开发手册 (作者:栾鹏) java教程全解 java读取图片成rgb二维数组 测试代码 public static void main(String[] args) {Color[][] a ...

  5. node + ts读取csv文件为二维数组

    node + TypeScript读取csv文件为二维数组 CSDN用户名:jcLee95 邮箱:291148484@163.com 原创不易,感谢点赞支持. 在数据分析的时候经常需要读取csv格式的 ...

  6. 实现从淘宝(天猫)定时抓取订单数据、打印电子面单并保存到ERP表中

    实现从淘宝(天猫)定时抓取订单数据.打印电子面单并保存到ERP表中 前言 实现思路 代码片段参考 前言 最近有厂商提出想把天猫店铺的数据拿到后台ERP管理系统中,并能实现线下打印电子面单功能.接手这个 ...

  7. python读取文件中的数据为二维数组变量_Numpy 多维数据数组的实现

    numpy包(模块)几乎总是用于Python中的数值计算.这个软件包为Python提供了高性能的向量.矩阵.张量数据类型.它是在C和Fortran中创建的,因此当计算被矢量化(用矩阵和矢量表示操作)时 ...

  8. 将pandas中Dataframe数据转换为二维数组array

    在实际的数据处理中,遇到将pandas中Dataframe的数据怎样去掉行列标签的问题,最后想到可以转化为二维数组来解决.思路如下: 一个Dataframe如下: pd: age astigmatic ...

  9. java二维数组添加数据_Java自学路线图

    目前Java在许多行业的客户端方面的应用非常多,比如OA.邮箱.投票.金融.考试.物流.医疗.矿山等信息方面的系统.Java开发者在这方面的需求也非常大,待遇也相当不错,工资水平可能和Java互联网方 ...

最新文章

  1. HTML的标签描述13
  2. 二进制状态压缩相关操作
  3. CF585E-Present for Vitalik the Philatelist【莫比乌斯反演,狄利克雷前缀和】
  4. 何时使用JavaFX代替HTML
  5. 团队的远程管理_不管理远程团队的7种方法
  6. python db2 linux 安装,python安装DB2模块
  7. html页面获取时间格式,js实现动态获取系统时间,显示到页面上
  8. 点击选中框 批量删除
  9. tiobe编程语言排名_排名前20位的编程语言:GitHut和Tiobe排名
  10. react 之 prop-types
  11. jpeg图像质量参数及icc信息提取
  12. 取字符串拼音首字母(js)
  13. 2022年地图产业研究报告
  14. 个人成长:谈谈工作之余如何提高个人技术水平
  15. 电脑定时关机、取消定时关机、滑动关机
  16. vue请求进度条效果
  17. 2023年电气,电子与信息工程国际会议(ISEEIE-2023)
  18. dns 解析,一个域名解析到多个ip地址
  19. 泛泰binx一键式离线刷机(可断网刷机,可刷任意版本)(官网脚本更新7.30)
  20. Java基础——LinkedList源码分析

热门文章

  1. python变量与常量内容:
  2. 一个没有收到任何Offer的应届生回想
  3. Linux解压rar、zip、war、tar文件
  4. AD账号创建日期、最近一次登录时间、最近一次重置密码时间查询
  5. BZOJ 2342: 【SHOI2011】 双倍回文
  6. 深入理解final关键字
  7. Android 基础概念了解
  8. 最大流问题的Ford-Fulkerson模板
  9. Flex读取XML配置文件
  10. 约会用语(很经典的)