elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [C++] Leer un archivo y meterlo en un array bidimensional
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: [C++] Leer un archivo y meterlo en un array bidimensional  (Leído 7,693 veces)
Kougami

Desconectado Desconectado

Mensajes: 53


Ver Perfil
[C++] Leer un archivo y meterlo en un array bidimensional
« en: 22 Febrero 2017, 14:47 pm »

Buenas,

Tengo un problema, necesito leer un archivo que tiene la siguiente informacion:
#######
#   .####
#           #
#@#$    #
###      #
######

Donde son 7 columnas por 6 filas, y entonces necesito leer el archivo, con los espacios incluidos y guardarlo en un array bidimensional que esta dentro de un struct; tal que asi:
Código
  1. const int MAX = 50;
  2. typedef char tTablero[MAX][MAX];
  3.   typedef struct{
  4.   tTablero tablero;
  5.   int columnas;
  6.   int filas;
  7.   string nombreDelFichero;
  8. }tJuego;
  9.  
Pero teniendo en cuenta que al principio no se sabe cuantas filas y columnas tiene el archivo.

Muchas gracias de antemano


En línea

dato000


Desconectado Desconectado

Mensajes: 3.034



Ver Perfil
Re: [C++] Leer un archivo y meterlo en un array bidimensional
« Respuesta #1 en: 22 Febrero 2017, 16:52 pm »

Necesitarias hacer lo siguiente:

1) Para obtener las columnas leer caracter por caracter sumando un contador y asignando la cantidad del mismo en la variable de columna. Dependiendo si tienes en una linea más caracteres que en la anterior linea, reasignar el contador y reasignarlo en la variable de columnas
2) Para obtener las filas leer la cantidad de lineas del archivo, nuevamente con otro contador de filas.

El problema que le veo es si tuvieras un caso desproporcionado de espacios, en la que quisieras leer espacios en una linea que tiene digamos un caracter '#' pero tuvieras en cuenta también espacios en blanco posteriores a ese caracter, creo que no es el caso, pero es importante tenerlo en cuenta.

Aqui encontre un ejemplo de un contador de caracterees de un archivo, puede que te sirva:

http://stackoverflow.com/questions/19416047/c-character-count-from-a-file

Código
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3.  
  4. int main() {
  5.  /* a buffer to hold the count of characters 0,...,256; it is
  6.    * initialized to zero on every element */
  7.  int count[256] = { 0 };
  8.  
  9.  /* loop counter */
  10.  int k;
  11.  
  12.  /* file handle --- in this case I am parsing this source code */
  13.  FILE *fp = fopen("ccount.c", "r");
  14.  
  15.  /* a holder for each character (stored as int) */
  16.  int c;
  17.  
  18.  /* for as long as we can get characters... */
  19.  while((c=fgetc(fp))) {
  20.  
  21.    /* break if end of file */
  22.    if(c == EOF) break;
  23.  
  24.    /* otherwise add one to the count of that particular character */
  25.    count[c]+=1;
  26.  }
  27.  
  28.  /* now print the results; only if the count is different from
  29.    * zero */
  30.  for(k=0; k<256; k++) {
  31.    if(count[k] > 0) {
  32.      printf("char %c: %d times\n", k, count[k]);
  33.    }
  34.  }
  35.  /* close the file */
  36.  fclose(fp);
  37.  
  38.  /* that's it */
  39.  return 0;
  40. }
  41.  

Puede que te sirva, ahora tengo una duda, estas armando un tetris??? porque hay otras formas... sin archivos.


En línea


ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: [C++] Leer un archivo y meterlo en un array bidimensional
« Respuesta #2 en: 22 Febrero 2017, 17:25 pm »

Si el archivo solo va a tener esos datos, entonces puedes ver el tamaño del archivo y dividirlo entre el número de caracteres de la primera fila (sumando el salto de línea).
Luego, y alo puedes leer con ifstream y la función getline().

Por cierto, en C++ no necesitas poner typedef para declarar estructuras:

Código
  1. const int MAX = 50;
  2. typedef char Tablero[MAX][MAX];
  3.  
  4. struct Juego{
  5.   Tablero tablero;
  6.   int columnas;
  7.   int filas;
  8.   string nombreDelFichero;
  9. };
O
Código
  1. const int MAX = 50;
  2.  
  3. struct Juego{
  4.   char tablero[MAX][MAX];
  5.   int columnas;
  6.   int filas;
  7.   string nombreDelFichero;
  8. };

Si no sabes hacer algo de lo comentado, indícalo.
En línea

Kougami

Desconectado Desconectado

Mensajes: 53


Ver Perfil
Re: [C++] Leer un archivo y meterlo en un array bidimensional
« Respuesta #3 en: 23 Febrero 2017, 09:29 am »

La cosa es que quiero hacer un sokoban, y en el archivo de texto estan todos los niveles seguidos y tienen distinto tamaño de filas y columnas, por lo que necesito un metodo que me guarde en el array un tablero segun el tamaño que este tenga
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: [C++] Leer un archivo y meterlo en un array bidimensional
« Respuesta #4 en: 23 Febrero 2017, 12:08 pm »

En ese caso, entre tablero y tablero, habrá algún separador. Una línea en blanco, quizás. Solo necesitas recorrer el archivo hasta encontrar ese separador. Ahí ya sabrás las filas y las columnas del tablero.
En línea

Kougami

Desconectado Desconectado

Mensajes: 53


Ver Perfil
Re: [C++] Leer un archivo y meterlo en un array bidimensional
« Respuesta #5 en: 26 Febrero 2017, 16:51 pm »

Osea que primero debo de recorrer el archivo para saber el numero de filas y columnas, y luego sabiendo ese dato, recorrerlo y guardarlo en el array bidimensional no??

Pero la cosa es que no se como hacer para leer los espacios en blanco, que tambien debo guardar en el array
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: [C++] Leer un archivo y meterlo en un array bidimensional
« Respuesta #6 en: 26 Febrero 2017, 16:54 pm »

Tanto un '#' como un espacio son ambos caracteres, y tanto fread como fgetc como gran parte de las funciones los van a tratar de igual forma. Simplemente, leerás el espacio.

Y sí, recorrerlo primero es una opción. Otra opción es ir leyendo e ir ampliando la matriz (crear otra más grande, copiar contenido antiguo y liberar la antigua). Lo que más cómodo se te haga.
En línea

Kougami

Desconectado Desconectado

Mensajes: 53


Ver Perfil
Re: [C++] Leer un archivo y meterlo en un array bidimensional
« Respuesta #7 en: 26 Febrero 2017, 17:07 pm »

La cosa es que para leer solo utilizo (Por orden explicita jajajaja) la forma tipo fich>> var; cin>>var; fich.get(var)
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: [C++] Leer un archivo y meterlo en un array bidimensional
« Respuesta #8 en: 26 Febrero 2017, 17:28 pm »

Oh cierto perdon, me confundí con el código de dato000.

Bien, el tema es, que ciertamente, cin>>string lee hasta salto de línea o espacios.
para leer una línea, getline(istream, string):
Código
  1. ifstream file(...);
  2. string linea;
  3. getline(file, linea);
  4.  
  5. // O, para leer de consola:
  6.  
  7. getline(cin, linea);
En línea

Kougami

Desconectado Desconectado

Mensajes: 53


Ver Perfil
Re: [C++] Leer un archivo y meterlo en un array bidimensional
« Respuesta #9 en: 28 Febrero 2017, 09:56 am »

Pero con el getline(), ¿Se leen tambien los espacios?
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Array bidimensional en pascal.
Ejercicios
sv51 4 14,027 Último mensaje 21 Junio 2008, 22:30 pm
por sv51
ayuda... lectura de string y meterlo en un array « 1 2 »
PHP
satan69 10 5,791 Último mensaje 11 Agosto 2009, 18:33 pm
por WHK
Ordenar array bidimensional
Java
KaRaLLo 5 18,643 Último mensaje 1 Abril 2013, 02:36 am
por seraff
Ayuda con Array bidimensional
Programación General
Javaniano 0 1,987 Último mensaje 8 Diciembre 2012, 13:38 pm
por Javaniano
Array Bidimensional de objetos « 1 2 3 »
Java
Nafko 20 9,926 Último mensaje 21 Abril 2015, 19:38 pm
por Usuario Invitado
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines