Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Leer de Archivo, ASCII extendido [C]

Estas en el tema de Leer de Archivo, ASCII extendido [C] en el foro de C/C++ en Foros del Web. Hola, soy nuevo en el foro, estudio Ingeniería en Electronica y Telecomunicaciones y estoy programando un pac-man (no programación gráfica, sino resbuscandola trabajando con caracteres,etc) ...
  #1 (permalink)  
Antiguo 27/12/2006, 12:30
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4
Antigüedad: 17 años, 4 meses
Puntos: 0
Mensaje Leer de Archivo, ASCII extendido [C]

Hola, soy nuevo en el foro, estudio Ingeniería en Electronica y Telecomunicaciones y estoy programando un pac-man (no programación gráfica, sino resbuscandola trabajando con caracteres,etc) para un tp de Informatica II y estoy teniendo problemas con la lectura desde un archivo.

Básicamente debo tener archivos de texto que contengan el dibujo de un laberinto para cada nivel. Para programar me hacen usar el Context con el compilador Borland C++ Compiler 5.5.

Para leer el laberinto lo estoy haciendo caracter a caracter con fgetc().
El problema es que el laberinto está hecho con ASCII extendido( ╚ ╔ ) en notepad (tuve que guardarlo en codificacion Unicode) y dsp al ejecutar el programa imprime otros simbolos tales como É,ô,æ... osea, el archivo contiene un caracter ╚ por ejemplo, el fgetc lo lee, pero cuando lo voy a imprimir o cargar en una matriz me termina quedando ô....
Creo q pasa con todos los simbolos del ascii extendido, no estoy seguro.

En fin, queria saber si hay alguna manera de hacer q funcione esto, asi quedan lindos los laberintos.

Desde ya gracias por la ayuda
  #2 (permalink)  
Antiguo 27/12/2006, 12:33
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Re: Leer de Archivo, ASCII extendido [C]

Si lo guardaste como Unicode, no es ASCII extendido. Debes guardar el archivo como pretendes que se lea, con el mismo formato y codificación.

Aun así, una solución mejor es crear una paleta y usarla para leer otros ficheros que contengan los laberintos, con posibilidad de que estén en distintos formatos.

Pero esto no es tema de programación en C ;)
  #3 (permalink)  
Antiguo 27/12/2006, 12:44
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4
Antigüedad: 17 años, 4 meses
Puntos: 0
Re: Leer de Archivo, ASCII extendido [C]

Lo guarde como Unicode porq cuando dsp de dibujar el laberinto con los caracteres ╗╝╚╔ el notepad te dice que el archivo contiene caracteres en formato Unicode y que se van a perder en caso de guardar el archivo en codificacion ANSI....

Con que correspondian al ascii extendido me refiero a que ya que el fgetc levanta los caracteres en una variable int, tal vez ese era el problema, siendo que con cualquier caracter del ASCII normal (0-128) no tengo ese problema
  #4 (permalink)  
Antiguo 27/12/2006, 13:06
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Re: Leer de Archivo, ASCII extendido [C]

Ya, pero es que Unicode no tiene nada que ver con ASCII o ASCII Extendido. Puedes tratar de utilizar otro programa mejor que "notepad" para tratar los textos, o como te dije, establecer una relación entre el formato que guarda el "notepad" y lo que te imprime en pantalla tu programa.

fgetc() devuelve el caracter leído como int, porque así nunca tendrás problemas de signos, overflows, etc. En principio el problema no es ese.
  #5 (permalink)  
Antiguo 27/12/2006, 17:40
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Re: Leer de Archivo, ASCII extendido [C]

fgetc no te sirve para leer Unicode para eso esta fgetwc. Calcula que tu archivo finalmente quedo con 2 bytes por caracter y estas leyendo 1 byte por caracter.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #6 (permalink)  
Antiguo 27/12/2006, 19:26
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Re: Leer de Archivo, ASCII extendido [C]

La otra forma es como menciono MAxextreme. Crear una "paleta".
Por ejemplo, si lees un 1, entonces escribes una pieza del laberinto.
Si les 2 pues otra y asi.

Aunque en mi opinion la solucion de Eternal Idol esta mas sencilla y bien.

Saludos
  #7 (permalink)  
Antiguo 28/12/2006, 21:07
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4
Antigüedad: 17 años, 4 meses
Puntos: 0
Re: Leer de Archivo, ASCII extendido [C]

Tengo q agregar alguna librería en especial para usar el fgetwc ??? porq no parece que cambie nada respecto del fgetc :S

El programa de prueba básicamente es este:

#include <stdio.h>
#include <stdlib.h>

void main ()
{
FILE *text;
int a,i,j;
char laberinto[10][10];
text=fopen("laberinto.txt","r");

for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
{
if(!feof(text))
{
a=fgetwc(text);
laberinto[i][j]=a;
printf("%c",laberinto[i][j]);
}
}
}
getch();
}

No encuentro como adjuntar archivos, asiq les cuento que el archivo laberinto.txt contiene un recuadro de 10x10 como el siguiente:

╔════════╗
║ ║
║ ║
║ ║
║ ║
║ ║
║ ║
║ ║
║ ║
╚════════╝


Cómo seria bien el tema de lo de la paleta??? (en el peor de los casos si no logro hacerlo andar de otra manera, tengo esperanza de que el fgetwc no ande porq yo soy un inepto nomas). Entiendo que si leo un 200, puedo entender q tengo q imprimir un ╚ , pero el fgetc no me está devolviendo 200, sino andaría perfecto .... a menos q arme los laberintos con otro ascii y dentro del programa haga la "reinterpretacion", con lo cual el trabajo estaria en hacer el laberinto y dsp borrarlo para reemplazar los ascii de recuadro por otros con los que no tenga problemas de lectura.... un poco pesado el laburo, pero sino queda otra lo voy a tener q hacer asi :(

Gracias por sus respuestas y la paciencia
  #8 (permalink)  
Antiguo 28/12/2006, 22:01
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Re: Leer de Archivo, ASCII extendido [C]

No no.
Si no te funciona el fgetwc, intenta usar la tecnica de paleta.
No es nada sencilla.

Como te dije.
Tu archivo de texto que contenga algo como:
61111111117
2 2
2 2
2 2
2 2
2 2
81111111119

Despues al lerr el archivo solo sustituyes.

Cuando leas 6, escribes ╔.
Cuando leas 2, escribes ║

Y asi, para que con numero formes tu laberinto.
Solo que esos simbolos los tienes que escribir usando el codigo ascii extendido.
por ahi hay una funcion printfwc(o algo asi), para imprimir caracteres unicode.

Saludos
  #9 (permalink)  
Antiguo 29/12/2006, 04:23
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Re: Leer de Archivo, ASCII extendido [C]

No veo la dificultad.

Vamos a ver, abre tu fichero .txt con un editor hexadecimal y comprueba qué valores exactamente han sido guardados (como ASCII, no Unicode). Atiende a que saldrán sin signo.

Luego vas a C, y compruebas que lo que lees es lo que imprimes; y cuidado, repito, con los signos.

Aun así, la técnica de la paleta es mucho mejor.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:12.