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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema lectura de datos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema lectura de datos  (Leído 1,805 veces)
Ockdatone

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Problema lectura de datos
« en: 11 Febrero 2014, 12:42 pm »

Buenos días, soy nuevo totalmente en C++ y lo primero a lo que me he tenido que enfrentar es a un problema muy complejo que tengo que resolver para mi doctorado. Obviamente los problemas comienzan nada más empezar con la lectura de datos que tengo que hacer, debido a que desconozco las dimensiones de los mismo. El tipo de datos es de este estilo:

1 2 3 4
#
11 20 53 89 68
98 65 59 86 38
11 28 73 64 58
#
235 236
278 958
985 642
285 852
374 591
#

La cuestión es que yo no voy a conocer el tamaño de las matrices que voy a tener en el fichero, con lo cual quiero leer el fichero de la siguiente manera.
Quiero que lea hasta que encuentre una # y me lo guarde en una matriz. Que siga leyendo hasta que encuentre otra # y me lo guarde en otra matriz distinta y así sucesivamente con las 20 o 30 matrices que utilice.
¿Podéis ayudarme? Gracias de antemano.


En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Problema lectura de datos
« Respuesta #1 en: 11 Febrero 2014, 12:54 pm »

Usa contenedores de la stl... así te puedes despreocupar del tamaño de cada matriz.

Código
  1. std::vector< std::vector< int > > matriz;
  2.  
  3. matriz.push_back( std::vecto< int >( ) ); // para insertar una nueva fila
  4.  
  5. matriz[ n ].push_back( valor ); // para insertar un nuevo valor en la fila n
  6.  

O bien puedes crearte una clase Matriz que encapsule este trabajo para que su manejo sea de lo más simple:

Código
  1. class Matriz
  2. {
  3.  public:
  4.    void NuevaFila( );
  5.    void NuevoValor( int valor );
  6.  
  7.    int Filas( ) const;
  8.    int Columnas( ) const;
  9.  
  10.    int Valor( int fila, int columna ) const;
  11.  private:
  12.  
  13.    std::vector< std::vector< int > > _valores;
  14. }
  15.  
  16.  
  17. void Matriz::NuevaFila( )
  18. {
  19.  _valores.push_back( std::vector< int >( ) );
  20. }
  21.  
  22. void Matriz::NuevoValor( int valor )
  23. {
  24.  _valores[ _valores.size( ) - 1 ].push_back( valor );
  25. }
  26.  
  27. int Matriz::Filas( ) const
  28. {
  29.  return _valores.size( );
  30. }
  31.  
  32. int Matriz::Columnas( ) const
  33. {
  34.  return _valores[ 0 ].size( );
  35. }
  36.  
  37. int Matriz::Valor( int fila, int columna ) const
  38. {
  39.  return _valores[ fila ].at( columna );
  40. }

Este diseño es, desde luego, mejorable, pero el código no deja de ser una idea sobre cómo solucionar tu problema.

Se me ocurren soluciones mucho más elaboradas y bonitas, pero se tarda más en diseñarlas.


« Última modificación: 11 Febrero 2014, 12:56 pm por eferion » En línea

Ockdatone

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Problema lectura de datos
« Respuesta #2 en: 11 Febrero 2014, 13:40 pm »

No me entero muy bien... Es que soy muy novato. Vamos a ver, yo lo que tengo es un archivo de datos, por ejemplo, datos.txt como el del ejemplo que puse. Cuando digo que no sé las dimensiones de las matrices (realmente no sé el número de filas, el de columnas sí, error mío al explicarme) es porque voy a leer distintos archivos de datos pues voy a tener varias instancias que es lo que me va a hacer variar el número de filas. Por tanto, no existe una forma de hacerlo del estilo,
while(carácter leído distinto de #)
añadir a matriz1
while(carácter leído distinto de #)
añadir a matriz 2
.
.
.
y así hasta que haya leído todas las matrices de mi .txt

Ya sé que no es muy elegante, pero eso es lo de menos, es por que sea sencillo para un novato.

Gracias
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Problema lectura de datos
« Respuesta #3 en: 11 Febrero 2014, 13:51 pm »

para la lectura de ficheros deberías mirar la clase istream.

La clase que yo te he propuesto es una forma de almacenar una matriz de tamaño desconocido... parte de la premisa de que las matrices a leer están bien formadas ( igual número de columnas en todas las filas ).

la idea a aplicar es más o menos así:

Código
  1. Matriz matriz;
  2.  
  3. matriz.NuevaFila( );
  4.  
  5. while ( !istream.eof( ) )
  6. {
  7.  if ( istream.get( ) == '#' )
  8.    matriz.NuevaFila( );
  9.  else
  10.  {
  11.    istream.unget( );
  12.    int valor;
  13.    istream >> valor;
  14.    matriz.NuevoValor( valor );
  15.  }
  16. }

Ahora mismo no puedo ponerme con un diseño más elaborado, pero sirve para que te hagas una idea.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ayuda con lectura y escritura de datos.ser
Java
Toryas 7 4,343 Último mensaje 3 Noviembre 2007, 15:32 pm
por marioly
foto lectura, y lectura veloz, scanning y otros metodos de lectura rapida....
Foro Libre
Kase 3 12,662 Último mensaje 4 Febrero 2014, 08:47 am
por camilo_
Sobre lectura de varios datos a la vez
Java
zonahurbana 9 3,449 Último mensaje 3 Marzo 2014, 13:04 pm
por ThinkByYourself
Error en lectura de datos con String y Int
Java
Chentul 1 1,566 Último mensaje 4 Mayo 2014, 10:46 am
por Zoik
Problema lectura de datos por fichero
Programación C/C++
mester 2 1,842 Último mensaje 7 Octubre 2015, 21:48 pm
por mester
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines