⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 load_save_file_data.cpp

📁 该文件主要用于FDTD的三维C++编程
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include "Load_Save_File_Data.h"
#include "Matrix.h"
#include <stdio.h>
#include <math.h> //required by atof()
#include <stdlib.h> //required by atof()
#include <string.h>
#include <cctype>

///////////////////////////////////////////////////////////////////////////////////////
//Save 1D vectors with double elements
///////////////////////////////////////////////////////////////////////////////////////
int save_1D(double *Tomb, long n_x_a, long n_x_b, long n_t, char *ut_nev)
{
	long i;

	char *File_Name = NULL;
	File_Name =(char *) calloc(512,sizeof(char));
	if (!File_Name)
	{
		return 1;
	}
	
	sprintf(File_Name, "%s_%d.dat",ut_nev,n_t);
	
	FILE *fp = NULL;
	
	fp = fopen(File_Name, "w+");
	if (!fp)
	{
		free(File_Name);
		return 2;
	}

    for (i = n_x_a; i < n_x_b; i++ )
	{
		fprintf(fp," %6.16f",Tomb[i]);
	}
	fclose(fp);

	free(File_Name);
	return 0;
}

///////////////////////////////////////////////////////////////////////////////////////
//Save 1D vectors with long elements
///////////////////////////////////////////////////////////////////////////////////////
int save_1D_long(long *Tomb, long n_x_a, long n_x_b, long n_t, char *ut_nev)
{
	long i;

	char *File_Name = NULL;
	File_Name =(char *) calloc(512,sizeof(char));
	if (!File_Name)
	{
		return 1;
	}
	
	sprintf(File_Name, "%s_%d.dat",ut_nev,n_t);
	
	FILE *fp = NULL;
	
	fp = fopen(File_Name, "w+");
	if (!fp)
	{
		free(File_Name);
		return 2;
	}

    for (i = n_x_a; i < n_x_b; i++ )
	{
		fprintf(fp," %d",Tomb[i]);
	}
	fclose(fp);

	free(File_Name);
	return 0;
}

///////////////////////////////////////////////////////////////////////////////////////
//Save 1D vectors with double elements
///////////////////////////////////////////////////////////////////////////////////////
int save_1D_binary(double *Tomb, long nx, long n_t, char *ut_nev)
{
	char *File_Name = NULL;
	File_Name =(char *) calloc(512,sizeof(char));
	if (!File_Name)
	{
		return 1;
	}
	
	sprintf(File_Name, "%s_%d.dat",ut_nev,n_t);
	
	FILE *fp = NULL;

	if ((fp=fopen(File_Name, "wb")) == NULL)
		return 2; //Failed to open the file for writing
    else
	{
		fwrite(Tomb,sizeof(double),nx,fp);
	    fclose(fp);
	}

	free(File_Name);
	return 0;
}

///////////////////////////////////////////////////////////////////////////////////////
//Save 2D matrix with double elements
///////////////////////////////////////////////////////////////////////////////////////
int save_2D(double **Tomb, long n_x_a, long n_x_b, long n_y_a, long n_y_b, 
	     	long n_t, char *ut_nev)
{
	long i, j;

	char *File_Name = NULL;
	File_Name =(char *) calloc(512,sizeof(char));
	if (!File_Name)
	{
		return 1;
	}

	sprintf(File_Name, "%s_%d.dat",ut_nev,n_t);

	FILE *fp = NULL;

	if ((fp=fopen(File_Name, "w+")) ==NULL)
	{
		free(File_Name);
		return 2;
	}
    else
	{
		for (i=n_x_a; i<n_x_b; i++)
		{	
			for (j=n_y_a; j<n_y_b; j++)
			{	
				fprintf(fp,"%6.12f  ",Tomb[i][j]);
			}
			fprintf(fp,"\n");
		}
		fclose(fp);
	}

	free(File_Name);
	return 0;
}

///////////////////////////////////////////////////////////////////////////////////////
//Save 2D matrix with double elements in binary file 
///////////////////////////////////////////////////////////////////////////////////////
int save_2D_binary(double **Tomb, long nx, long ny, long n_t, char *ut_nev)
{
	char *File_Name = NULL;
	File_Name =(char *) calloc(512,sizeof(char));
	if (!File_Name)
	{
		return 1;
	}
	
	sprintf(File_Name, "%s_%dsz%d_%d.dat",ut_nev,nx,ny,n_t);

	FILE *fp = NULL;
	size_t nr_wr;

	if ((fp=fopen(File_Name, "wb")) == NULL)
		return 2; //Failed to open the file for writing
    else
	{
		size_t nu = nx*ny;
		nr_wr = fwrite(Tomb[0],sizeof(double),nu,fp);
	    fclose(fp);
		if (nr_wr != nu)
		{
			free(File_Name); //Failed to write all elements in the file
			return 3;
		}
	}

	free(File_Name);
	return 0;
}

///////////////////////////////////////////////////////////////////////////////////////
//Save 3D matrix with double elements in binary file 
///////////////////////////////////////////////////////////////////////////////////////
int save_3D_binary(double ***Tomb, long nx, long ny, long nz, long n_t, char *ut_nev)
{
	char *File_Name = NULL;
	File_Name =(char *) calloc(512,sizeof(char));
	if (!File_Name)
	{
		return 1; //Memory allocation problem
	}

	sprintf(File_Name, "%s_%dsz%dsz%d_%d.dat",ut_nev,nx,ny,nz,n_t);

	FILE *fp = NULL;
	size_t nr_wr;

	if ((fp=fopen(File_Name, "wb")) == NULL)
		return 2; //Failed to open the file for writing
    else
	{
		size_t nu = nx*ny*nz;
		nr_wr = fwrite(Tomb[0][0],sizeof(double),nu,fp);
	    fclose(fp);
		if (nr_wr != nu)
		{
			free(File_Name); //Failed to write all elements in the file
			return 3;
		}
	}

	free(File_Name);
	return 0;
}

///////////////////////////////////////////////////////////////////////////////////////
//Save 4D matrix with double elements in binary file 
///////////////////////////////////////////////////////////////////////////////////////
int save_4D_binary(double ****Tomb, long nu, long n_t, char *ut_nev)
{
	char *File_Name = NULL;
	File_Name =(char *) calloc(512,sizeof(char));
	if (!File_Name)
	{
		return 1; //Memory allocation problem
	}

	sprintf(File_Name,"%s_%d_%d.dat",ut_nev,nu,n_t);

	FILE *fp = NULL;
	long nr_wr;
	
	if ((fp=fopen(File_Name, "wb")) == NULL)
	{
		free(File_Name);
		return 2; //Failed to open the file for writing
	}
    else
	{
		nr_wr = (long) fwrite(Tomb[0][0][0],sizeof(double),nu,fp);
	    fclose(fp);
		if (nr_wr != nu)
		{
			free(File_Name); //Failed to write all elements in the file
			return 3;
		}
	}

	free(File_Name);
	return 0;
}

///////////////////////////////////////////////////////////////////////////////////////
//Reads 1D matrix with double elements from binary file 
///////////////////////////////////////////////////////////////////////////////////////
int load_1D_binary(double *Tomb, long nx, char *ut_nev)
{
	FILE *fp;

	if ((fp=fopen(ut_nev, "rb")) == NULL)
		return 2;
    else
	{
		fread(Tomb,sizeof(double),nx,fp);
	    fclose(fp);
	}

	return 0;
}

///////////////////////////////////////////////////////////////////////////////////////
//Reads 2D matrix with double elements from binary file 
///////////////////////////////////////////////////////////////////////////////////////
int load_2D_binary(double **Tomb, long nx, long ny, char *ut_nev)
{
	FILE *fp;

	if ((fp=fopen(ut_nev, "rb")) == NULL)
		return 2;
    else
	{
		fread(Tomb[0],sizeof(double),nx*ny,fp);
	    fclose(fp);
	}

	return 0;
}

///////////////////////////////////////////////////////////////////////////////////////
//Reads 3D matrix with double elements from binary file 
///////////////////////////////////////////////////////////////////////////////////////
int load_3D_binary(double ***Tomb, long nx, long ny, long nz, char *ut_nev)
{
	FILE *fp;

	if ((fp=fopen(ut_nev, "rb")) == NULL)
		return 2;
    else
	{
		fread(Tomb[0][0],sizeof(double),nx*ny*nz,fp);
	    fclose(fp);
	}

	return 0;
}

///////////////////////////////////////////////////////////////////////////////////////
//Reads 4D matrix with double elements from binary file 
///////////////////////////////////////////////////////////////////////////////////////
int load_4D_binary(double ****Tomb, long nu, char *ut_nev)
{
	FILE *fp;

	if ((fp=fopen(ut_nev, "rb")) == NULL)
		return 2;
    else
	{
		fread(Tomb[0][0][0],sizeof(double),nu,fp);
	    fclose(fp);
	}

	return 0;
}

///////////////////////////////////////////////////////////////////////////////////////
//Save 2D matrix with long elements
///////////////////////////////////////////////////////////////////////////////////////
int save_2D_long(long **Tomb, long n_x_a, long n_x_b, long n_y_a, long n_y_b, 
	     	     long n_t, char *ut_nev)
{
	long i, j;

	char *File_Name = NULL;
	File_Name =(char *) calloc(512,sizeof(char));
	if (!File_Name)
	{
		return 1;
	}
	
	strcat(File_Name,ut_nev);
	char buffer[256];
	sprintf(buffer, "_%d", n_t);
	strcat(File_Name,buffer);
	strcat(File_Name,".dat");

	FILE *fp;
	if ((fp=fopen(File_Name, "w+")) ==NULL)
		return 2;
    else
	{
		for (i=n_x_a; i<n_x_b; i++)
		{	
			for (j=n_y_a; j<n_y_b; j++)
			{	
				fprintf(fp,"%d  ",Tomb[i][j]);
			}
			fprintf(fp,"\n");
		}
		fclose(fp);
	}

	free(File_Name);
	return 0;
}

///////////////////////////////////////////////////////////////////////////////////////
//Load 2D matrix with double elements
///////////////////////////////////////////////////////////////////////////////////////
int load_2D(double **Tomb, long nx, long ny, char *ut_nev)
{
	FILE *fname = NULL;

	char str[100];
	long i = 0;
	long j = 0;
	if( (fname = fopen( ut_nev, "r" )) != NULL )
	{
		while ( fscanf(fname,"%s", &str) != EOF )
		{
			if (i==nx)
			{
				return 3; //wrong dimensions
			}

			Tomb[i][j] = atof(str);
			if (Tomb[i][j] == 0.0)
			{
				long k = 0;
				while(str[k] != '\0')
				{
					if ( !( (str[k]>='0' && str[k]<='9') ||
							(str[k] == 46 &&  
							( isdigit(str[k-1]) != 0 || isdigit(str[k+1]) != 0) ) ) &&  (str[k] != '-'))
						return 2; //wrong file content
					k++;
				}
			}
			j++;
			if (j == ny)
			{
				j = 0;
				i++;
			}
		}
		fclose(fname);
	}
	else
	{
 		return 1; //faild to open the file
	}

	if (i!=nx)
	{
		return 3; //wrong dimensions
	}

	return 0;
}

///////////////////////////////////////////////////////////////////////////////////////
//Load 2D matrix with long elements
///////////////////////////////////////////////////////////////////////////////////////
int load_2D_long(long **Tomb, long nx, long ny, char * ut_nev)
{
	FILE *fname;

	char str[100];
	long i = 0;
	long j = 0;
	if( (fname = fopen( ut_nev, "r" )) != NULL )
	{
		while ( fscanf(fname,"%s", &str) != EOF )
		{
			if (i==nx)
			{
				return 3; //wrong dimensions
			}

			Tomb[i][j] = atol(str);
			if (Tomb[i][j] == 0)
			{
				long k = 0;
				while(str[k] != '\0')
				{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -