vs2019读取和写入TXT文件数据,写入matlab文件用法,数据归一化

vs2019读取和写入TXT文件数据,写入matlab文件用法,数据归一化

在读取大量数据的时候,经常会把数据存储在TXT文件里,然后让vs的程序读取,本文主要写了vs对TXT数据的读取和写入,以及写入MATLAB的.m文件。
一,读取TXT文件数据
首先要加上头文件 #include"fstream .h"(编辑的时候<>打不出来,就用了“fstream .h ”),表示程序包含fstream(文件流),然后才能读写。
(1)一个TXT文件存储一个类型的数据,就是说这个文件只有这一种数据。代码如下:

void data(){
    double X[Data_number]={0};//Data_number代表数据的个数
    double Y[Data_number]={0};
    ifstream in1, in2;//从硬盘到内存
	in1.open("E:\\shuju\\x2.txt");//在相应的路径中打开txt文件
	in2.open("E:\\shuju\\y2.txt");
	for (int i = 0; i < Data_number; i++)
	{//按行读取文件,Data_number表示数据有多少行,一行一个数据
		in1 >> X[i];
	    //cout << X[i] << endl;//可以在此输出数据,检查是否读取成功
	}
	for (int i = 0; i < Data_number; i++)
	{//按行读取文件,Data_number表示数据有多少行,一行一个数据
		in2 >> Y[i];
		//cout << Y[i] << endl;
	}
	in1.close();//文件关闭
	in2.close();//文件关闭
	}
	

以上就实现了同时按行读取两个txt文件,一个文件存储的是x2的数据,另一个文件存储的是y2的数据,都有Data_number行的数据。

(2)一个TXT文件存储多个类型的数据。代码如下:

   void data()
   {
    double X[Data_number]={0};//Data_number代表数据的个数
    double Y[Data_number]={0};
	double a[Data_number][2];//定义一个二维数组读取数据
	ifstream in1, in2;
	in1.open("E:\\shuju\\ans2.txt");
	for (int i = 0; i < Data_number; i++)//按行
	{
		for (int j = 0; j < 2; j++)//共有2列,每列代表一种数据
		{
			in1 >> a[i][j];//按行按列读入数据
		}
	}
	in1.close();//关闭文件,到这一步已经把数据读取到二维数组a中
//如果想要分开存储的话,只需按照下边的方法把每列的数据传给X和Y即可
	for (int i = 0; i < Data_number; i++)
	{
		X[i] = a[i][0];
		Y[i] = a[i][1];
	}
   }

以上就实现了同时按行读取一个文件ans2中的两种数据,每列代表一种数据,有Data_number行的数据。

二,写入TXT文件数据
同样,要加上头文件 #include"fstream .h"(编辑的时候<>打不出来,就用了“fstream .h ”),表示程序包含fstream(文件流),然后才能读写。

  void indata()
  {
    double Code[line][column]={1};//需要存入的数据
    ofstream input("E:\\data\\存入数据.txt");//存入数据名
	for (int i = 0; i < line; i++)//行
	{		
	    for (int j = 0; j < column; j++)//列
		{
			input << Code[i][j] <<" ";
			//将Code的数据存入TXT文件,此时应全是1
		}
		input <<endl;
	}
	input.close();
   }

以上存储了数据到txt文件中。

三,vs写matlab的.m文件

    FILE* f;//建立一个文件操作指针
	errno_t err;  //判断此文件流是否存在 存在返回1
	err = fopen_s(&f, "E://GPUPSO.m", "w");//文件输出路径
	//以下的代码是matlab的代码写法
	fprintf(f, "clc;\nclear;\nhold on;\nbox on;\ngrid on;\n");
	//输入语句,box,四周都有刻度,grid 打开网格
	//绘制原始数据
	fprintf(f, "X = [");//自变量原始
	for (int i = 0; i < Data_number; i ++)
	{
		fprintf(f, "%f,", X[i]);//写入X的数据
	}
	fprintf(f, "];\n");
	fprintf(f, "Fact=[");//因变量原始
	for (int i = 0; i < Data_number; i ++)
	{
		fprintf(f, "%f,", Y[i]);//写入Y的数据
	}
	fprintf(f, "];\n");
	fprintf(f, "plot(X,Y,'ko');\n");//画图
	fprintf(p, "axis([0 120 0 1])");//横纵坐标范围
	fclose(f);
	f = nullptr;//防止野指针出现

以上就用vs来写入.m文件,可以在对应路径中找到文件并打开;其实写法和matlab语句类似(图中绿色的代码为在matlab的.m文件中的代码),只是加了开头和结尾,

四,归一化
需要头文件#include"algorithm.h"。

float Fact[Data_number]={“输入要归一化的数据”  };
float dMaxValue = *max_element(Fact, Fact+Data_number);  //求最大值
	cout << "maxdata" << dMaxValue << '\n';
float dMinValue = *min_element(Fact, Fact+Data_number);  //求最小值
	cout << "mindata" << dMinValue << '\n';
	for (int i = 0; i < Data_number; i++) {//归一化
Fact[i] = (ymax - ymin) * (Fact[i] - dMinValue) / (dMaxValue - dMinValue) + ymin;
		cout << Fact[i] << ",";//输出归一化后的结果
	}

以上仅为本人参考其他内容自己的理解,代码不可直接复制运行,因为文件路径,文件名,还有数据都要是自己用的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值