Lectura y escritura de archivos de texto y de binario en c++ con fstream

Tengo los siguientes ficheros

MP-FILTRO-T
#FILTRO LAPLACIANA
3 3
0.167 0.667 0.167
0.667 -3.33 0.667
0.167 0.667 0.167
MP-FILTRO-B
3 3
ÇK7?A`Å?òÒMbXå?ÇK7?A`Å?òÒMbXå?€p=
×£
ÀòÒMbXå?ÇK7?A`Å?òÒMbXå?ÇK7?A`Å?
Como puede observarse uno es un fichero de texto y otro es binario

Archivo de texo
Lo que tengo que hacer es leer la cabecera de ese archivo osea la primera linea, para saber si estoy leyendo en modo texto o en modo binario, el comentario que esta en # puede aparecer o no si aparece solo ocupa una linea,

Dos enteros, en texto, que indican el número de filas y columnas de nuestro

archivo, separados por un carácter “blanco”.

Tantas filas como indica el número de filas y, por cada fila, tantos valores
reales como indica el número de columnas separados por un separador
(normalmente un tabulador)
y esos datos guardalos en una matriz creada anteriormente
en el caso del archivo binario

Lo que tengo que hacer es leer la cabecera de ese archivo osea la primera linea, para saber si estoy leyendo en modo texto o en modo binario, el comentario que esta en # puede aparecer o no si aparece solo ocupa una linea,

Dos enteros, en texto, que indican el número de filas y columnas de nuestro
filtro separados por un carácter “blanco”
Tantos datos de tipo double como sean necesarios para representar el archivo.
Estarán almacenados en formato binario, sin separación entre ellos. En total
leeremos número filas × número columnas valores double.

y esos datos guardalos en una matriz creada anteriormente
lo que tengo hecho hasta ahora es esto:
bool Signal :: LeerSignal(const char file[]) // Carga un fichero
{
int i=0, j=0;
long lon;
bool éxito=false;
string data;
ifstream fich (file,ios::in) //fichero en modo lectura
if(fich){
fich >> data;
if(data.compare("MP-FILTRO-T")){ // veo si la cabecera es esa cadena
while(f>>data)
this->Set(i,j,data) //guardo los datos en mi matriz
}else{ if(data.compare("MP-FILTRO-B")){// veo si la cabecera es esa cadena
while(f>>data)
}
}
}
else{
cout<<"No se puede leer el fichero"<<endl;
return éxito=false;
}
return éxito;
}
no se como distinguir los datos de enteros y los datos de double y mucho menos los de binario para irlos sacando del fichero e irlos guardando en mi matriz
y en escribir es justo lo contrario poner el nombre de la cabecera, los dos enteros, y escribir en texto o en binario según la cabecera los datos de mi matriz en un archivo
A ver si alguien puede echarme una mano porque me encuentro bastante perdido de como hacer esto.

Añade tu respuesta

Haz clic para o