Hola a todos, este es mi primer mensaje en el foro. Hace poco estoy estudiando este lenguaje por mi cuenta y me ha surgido una duda, yo trabajo con C.
El codigo lo que deberia hacer es leer de un fichero llamado "text" todos sus valores, y escribir en el fichero "text.txt" estos mismos valores pero en ANSI segun corresponda.
Para eso use un Switch, y en cada caso asigne una letra del abecedario a un valor en hexadecimal.
Este es el archivo "text" visto en hexadecimal:
http://imageshack.us/photo/my-images/818/hlhl.png/
Este es el codigo:
#include <stdio.h>
#include <iostream>
#define MAXLINE 300
int main()
{
int size, i;
char val[MAXLINE];
FILE* f = fopen("./text", "r");
fseek(f, 0x0, SEEK_END);
size = ftell(f);
fseek(f, 0x0, SEEK_SET);
for(i = 0; i <= size; ++i)
fread(&val, 1, sizeof (char), f);
fclose (f);
for(i = 0; i <= size; ++i){
switch(val){
case 0x0f:
val = 'z';
break;
case 0x0c:
val = 'y';
break;
case 0x01:
val = 'x';
break;
case 0x13:
val = 'u';
break;
case 0x10:
val = 't';
break;
case 0x09:
val = 's';
break;
case 0x05:
val = 'r';
break;
case 0x34:
val = 'q';
break;
case 0x16:
val = 'p';
break;
case 0x0a:
val = 'o';
break;
case 0x0e:
val = 'n';
break;
case 0x06:
val = 'm';
break;
case 0x04:
val = 'l';
break;
case 0x14:
val = 'k';
break;
case 0x37:
val = 'j';
break;
case 0x08:
val = 'i';
break;
case 0x07:
val = 'h';
break;
case 0x02:
val = 'g';
break;
case 0x0d:
val = 'f';
break;
case 0x19:
val = 'e';
break;
case 0x12:
val = 'd';
break;
case 0x36:
val = 'c';
break;
case 0x11:
val = 'b';
break;
case 0x32:
val = 'a';
break;
default:
val = '*';
break;
}
}
FILE* h = fopen("./text.txt", "w");
fseek(h, 0x0, SEEK_SET);
for(i = 0; i <= size; ++i)
fwrite(&val, sizeof(char), 1, h);
fclose (h);
}
Y asi queda el archivo text.txt:
d*rxx*srh*rh*rg*********************g*******i****x**g***********i***********i********x**********************g**********x****t*****xx*****************************q**************************i*******************************************************g************
Hay algunos valores que los esta tomando como "default", por ejemplo en la imagen del archivo text estos son los ultimos valores:
22 03 0a 16 05 06 10 00
Si el switch trabaja correctamente deberia ser reemplazado por:
**o*rm**
El programa tiene algun fallo ya que no es eso lo que finalmente contiene el archivo text.txt.
Ya me había pasado antes algo similar en donde muchos valores no eran correctamente reemplazados y escritos en un archivo de texto.
¿Puede alguien ayudarme o marcarme cuales son mis errores?.
El codigo lo que deberia hacer es leer de un fichero llamado "text" todos sus valores, y escribir en el fichero "text.txt" estos mismos valores pero en ANSI segun corresponda.
Para eso use un Switch, y en cada caso asigne una letra del abecedario a un valor en hexadecimal.
Este es el archivo "text" visto en hexadecimal:
http://imageshack.us/photo/my-images/818/hlhl.png/
Este es el codigo:
#include <stdio.h>
#include <iostream>
#define MAXLINE 300
int main()
{
int size, i;
char val[MAXLINE];
FILE* f = fopen("./text", "r");
fseek(f, 0x0, SEEK_END);
size = ftell(f);
fseek(f, 0x0, SEEK_SET);
for(i = 0; i <= size; ++i)
fread(&val, 1, sizeof (char), f);
fclose (f);
for(i = 0; i <= size; ++i){
switch(val){
case 0x0f:
val = 'z';
break;
case 0x0c:
val = 'y';
break;
case 0x01:
val = 'x';
break;
case 0x13:
val = 'u';
break;
case 0x10:
val = 't';
break;
case 0x09:
val = 's';
break;
case 0x05:
val = 'r';
break;
case 0x34:
val = 'q';
break;
case 0x16:
val = 'p';
break;
case 0x0a:
val = 'o';
break;
case 0x0e:
val = 'n';
break;
case 0x06:
val = 'm';
break;
case 0x04:
val = 'l';
break;
case 0x14:
val = 'k';
break;
case 0x37:
val = 'j';
break;
case 0x08:
val = 'i';
break;
case 0x07:
val = 'h';
break;
case 0x02:
val = 'g';
break;
case 0x0d:
val = 'f';
break;
case 0x19:
val = 'e';
break;
case 0x12:
val = 'd';
break;
case 0x36:
val = 'c';
break;
case 0x11:
val = 'b';
break;
case 0x32:
val = 'a';
break;
default:
val = '*';
break;
}
}
FILE* h = fopen("./text.txt", "w");
fseek(h, 0x0, SEEK_SET);
for(i = 0; i <= size; ++i)
fwrite(&val, sizeof(char), 1, h);
fclose (h);
}
Y asi queda el archivo text.txt:
d*rxx*srh*rh*rg*********************g*******i****x**g***********i***********i********x**********************g**********x****t*****xx*****************************q**************************i*******************************************************g************
Hay algunos valores que los esta tomando como "default", por ejemplo en la imagen del archivo text estos son los ultimos valores:
22 03 0a 16 05 06 10 00
Si el switch trabaja correctamente deberia ser reemplazado por:
**o*rm**
El programa tiene algun fallo ya que no es eso lo que finalmente contiene el archivo text.txt.
Ya me había pasado antes algo similar en donde muchos valores no eran correctamente reemplazados y escritos en un archivo de texto.
¿Puede alguien ayudarme o marcarme cuales son mis errores?.