📄 load_save_file_data.cpp
字号:
#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 + -