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

[SOLUCIONADO] Problema al leer desde Archivo c++

Estas en el tema de Problema al leer desde Archivo c++ en el foro de C/C++ en Foros del Web. Buenas a todos!!! Estoy tratando de hacer este ejercicio y me encontre con el problema que cuando quiero leer los datos ubicados en un archivo ...
  #1 (permalink)  
Antiguo 23/06/2013, 19:22
 
Fecha de Ingreso: junio-2013
Mensajes: 2
Antigüedad: 10 años, 10 meses
Puntos: 0
Pregunta Problema al leer desde Archivo c++

Buenas a todos!!! Estoy tratando de hacer este ejercicio y me encontre con el problema que cuando quiero leer los datos ubicados en un archivo y volcarlos en una matriz no puedo, e intentado varias formas pero ninguna me sirvio, por eso si me pueden dar una mano mucho mejor. Ahora les explico

1.- en esta primera parte genero el fichero
Código c++:
Ver original
  1. void carga(int matriz[][2])
  2. {
  3.     int dec, f, c,i=1;
  4.     ofstream alumnos;
  5.     alumnos.open("RegistroNotas.txt",ios::out|ios::app);
  6.     if (alumnos.fail())
  7.     {
  8.         cout<<"Error al abrir el archivo"<<endl;
  9.         getch();
  10.     }else
  11.         {
  12.             for (f=0; f<20; f++)
  13.             {
  14.                 alumnos<<"Alumno "<<i<<endl;
  15.                 alumnos<<"Nota 1: "<<matriz[f-1][2]<<endl;
  16.                 alumnos<<"Nota 2: "<<matriz[f][1]<<endl;
  17.                 alumnos<<endl;
  18.                 i=i+1;
  19.             }
  20.  
  21.             alumnos.close();
  22.         }
  23. }


2.- En esta intento leerlo y volcarlo en una matriz.(Es una de las ultimas que probe)
Código c++:
Ver original
  1. void cargamat(int matriz[][2])
  2. {
  3.     int f,c,nota1,nota2;
  4.     ifstream salida;
  5.     salida.open("RegistroNotas.txt",ios::in);
  6.     if (salida.fail())
  7.     {
  8.         cout<<"Error al abrir el archivo"<<endl;
  9.         getch();
  10.     }else
  11.         {
  12.  
  13.             while (salida.eof())
  14.             {
  15.                 for (int c=0; c<20; c++)
  16.                 {
  17.                     for(int f=0; f<2; f++)
  18.                     {
  19.                         salida>>matriz[c][f];
  20.  
  21.                     }
  22.                 }
  23.             }
  24.  
  25.             salida.close();
  26.         }
  27. }

3.- Les dejo como se generan los datos en el archivo.
Alumno 1
Nota 1: 8
Nota 2: 9

Alumno 2
Nota 1: 8
Nota 2: 1

Alumno 3
Nota 1: 7
Nota 2: 3

Alumno 4
Nota 1: 9
Nota 2: 1

Alumno 5
Nota 1: 8
Nota 2: 7
etc hasta el alumno 20.....


En lo que me puedan dar una mano sera agradecido....

Última edición por sinfin_22; 23/06/2013 a las 20:01
  #2 (permalink)  
Antiguo 24/06/2013, 05:34
 
Fecha de Ingreso: julio-2012
Mensajes: 133
Antigüedad: 11 años, 9 meses
Puntos: 22
Respuesta: Problema al leer desde Archivo c++

Hola.

El formato de guardado es bastante inusual y muy, pero muy propenso a equívocos.

Pero si el archivo txt mantiene estrictamente el formato que mostras en tu mensaje, para cargar los datos en la matriz se podría hacer:
Código C++:
Ver original
  1. #include <iostream>
  2. #include <string>
  3. #include <fstream>
  4. #include <cstdlib>
  5.  
  6. using namespace std;
  7.  
  8. int CargarMatriz(float matriz[][2]);
  9. void MostrarMatriz(float matriz[][2], int rows);
  10. ...
  11.  
  12. int main()
  13. {
  14.   float matriz[100][2];  // n alumnos x 2 notas
  15.   int rows = CargarMatriz(matriz);
  16.   MostrarMatriz(matriz, rows);
  17.   ...
  18. }
  19.  
  20. int CargarMatriz(float matriz[][2])
  21. {
  22.   ifstream alumnos("C:\\RegistroNotas.txt",ifstream::in);
  23.   string line;
  24.   int row = 0;
  25.   while(!alumnos.eof()) {
  26.     if(getline(alumnos,line,'\n')){
  27.        if (line.find(":") != string::npos)
  28.         if (line.find("Nota 1") != -1)
  29.           matriz[row][0] = atof(line.substr(line.find(":")+2,line.length()).c_str());
  30.         if (line.find("Nota 2") != string::npos) {
  31.           matriz[row][1] = atof(line.substr(line.find(":")+2,line.length()).c_str());
  32.           row++;
  33.         }
  34.     }
  35.   }
  36.   alumnos.close();
  37.   return row;
  38. }
  39.  
  40. void MostrarMatriz(float matriz[][2], int rows)
  41. {
  42.   cout.precision(2);
  43.   for(int i = 0; i < rows; i++)
  44.     cout << "Alumno " << i+1 << ", Nota 1: " << fixed << matriz[i][0]
  45.          << ", Nota 2: " << fixed << matriz[i][1] << endl;
  46. }
  47. ...
Si fuera un caso real, no un ejemplo, habría que disponer de un arreglo adicional para almacenar los nombres de los alumnos...

Saludos. :)
  #3 (permalink)  
Antiguo 24/06/2013, 05:53
 
Fecha de Ingreso: junio-2013
Mensajes: 2
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: Problema al leer desde Archivo c++

El archivo puede quedar de la siguiente manera tambien, siendo el primer digito el codigo del alumno y los otros 2 las notas correspondientes....
1 5 5

2 8 4

3 8 9

4 3 8

5 9 7

6 1 8

7 5 5

8 6 1
  #4 (permalink)  
Antiguo 24/06/2013, 08:23
 
Fecha de Ingreso: julio-2012
Mensajes: 133
Antigüedad: 11 años, 9 meses
Puntos: 22
Respuesta: Problema al leer desde Archivo c++

Hola.

Tal vez te resulte mas simple así... Pero igualmente vas a tener que usar un arreglo para los nombres que se relacionarán a los códigos de alumnos obtenidos y la matriz de números reales para las notas. En líneas generales podes guiarte en la forma leer los datos desde el archivo del mensaje anterior .

Pienso que te sería mucho mas sencillo trabajar usando un arreglo de estructuras donde estén agrupados los datos de los alumnos.

Saludos. :)

Etiquetas: int
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 23:04.