• Domingo 19 de Mayo de 2024, 02:27

Autor Tema:  Problemas al leer archivos  (Leído 1550 veces)

Fx196

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Problemas al leer archivos
« en: Viernes 31 de Diciembre de 2010, 05:35 »
0
Hola, estoy intentando leer una especie de mapa de un archivo a un array, pero tengo unas dudas.

Lo estoy haciendo de esta forma:

Código: C++
  1. #include <iostream>
  2. #include <fstream>
  3.  
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8.     const int x = 17;
  9.     const int y = 12;
  10.     char Map[y][x];
  11.  
  12.     ifstream MapF("Levels/Level00.txt");
  13.  
  14.     if (!MapF)
  15.     {
  16.         cerr << "Error..." << endl;
  17.         exit(1);
  18.     }
  19.  
  20.     int count = 0;
  21.  
  22.     // Leer...
  23.     while (!MapF.eof())    
  24.     {
  25.         MapF.getline( (char*) Map + count, x);
  26.         if (*((char*) Map + count) != '#')            
  27.             count += x;
  28.     }
  29.  
  30.     MapF.close();
  31.  
  32.     // Imprimir...
  33.     for (int i = 0; i < y; i++)
  34.     {
  35.         for (int j = 0; j < x; j++)
  36.         {
  37.             cout << Map[i][j];                
  38.         }
  39.         cout << endl;
  40.     }
  41.  
  42.     return 0;
  43. }
  44.  
  45.  

Los archivos que voy a leer son de este tipo:

Código: Python
  1. #Comentario
  2. #Si me paso de
  3. #16 caracteres
  4. #por línea, o
  5. #dejo una linea
  6. #al final sale
  7. #error.
  8. rrrrrrrrrrrrrrrr
  9. r  r r         r
  10. r  r   r    r  r
  11. r        fr    r
  12. r   r          r
  13. r          r   r
  14. r r   r       rr
  15. r   r    r     r
  16. rt             r
  17. r  r  r   r    r
  18. r  r           r
  19. rrrrrrrrrrrrrrrr
  20.  

Si dejo una línea en blanco al final me sale este error: "Run-Time Check Failure #2 - Stack around the variable 'Map' was corrupted".
Y si me paso de 16 caracteres sale este; "Excepción no controlada en 0x67b00866 en Map.exe: 0xC0000005: Infracción de acceso al escribir en la ubicación 0x00250007".
Si cambio el valor de x a 16 (sólo me interesa las 16 primeras columnas) me sale este error "Excepción no controlada en 0x7770159e en Map.exe: 0xC0000005: Access violation".

Supongo que el caracter 17 es el salto de línea o fin de línea, y por eso si aumento uno serían 18 y violaría la memoria o algo así.

Bueno, quisiera saber como puedo hacer para poder tener sólo el array de 12*16, y como puedo mejorar la forma de obtenerlo, sin tener problemas por líneas de mayores de 16 caracteres o líneas en blanco al final.

Estoy usando MS Visual C++ 2008 Express Edition.

Gracias y feliz año nuevo.

LapizTolita

  • Miembro activo
  • **
  • Mensajes: 27
    • Ver Perfil
Re: Problemas al leer archivos
« Respuesta #1 en: Jueves 13 de Enero de 2011, 16:01 »
0
Bueno espero no haber llegado muy tarde  :P , pero quiero que esto quede como solucionado por si otro usuario llegase a tener el mismo problema. Sin mas rodeos el error es en la linea que dice: while (!MapF.eof()) Ahí debería ir while (i<y)  así no pasan cosas como vos decís que si pones una linea vacía al final seguís haciendo getline() demás sobre el arreglo Map.

Esta más fácil de ver si lo haces así:

Código: C++
  1.  
  2. int i=0;
  3.     while (i<y)    
  4.      {
  5.          MapF.getline( Map[i], x);
  6.          if(Map[i][0]!='#')
  7.              i++;
  8.      }
  9.