Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: mari2diaz en 16 Marzo 2022, 04:48 am



Título: Lectura de fichero de texto en c++ el programa no ejecuta
Publicado por: mari2diaz en 16 Marzo 2022, 04:48 am
lo que quiero hacer es leer estas 2 variables de un fichero de texto

Proceso1   6
Proceso2   7
Proceso3   2
Proceso4   10

pero el programa no se ejecuta, y no se que estoy haciendo mal, la cola si funciona ya la probé sin datos del fichero

Código
  1. std::ifstream archivoProcesos("Procesos.txt");
  2. NodoProceso* Cola;
  3. std::string linea;
  4. std::string nombreProceso;
  5. int tiempoCPU;
  6. for(std::string proceso; std::getline(archivoProcesos, linea); ){
  7.  
  8. std::istringstream datosProceso(linea);
  9.  
  10. for(int columna = 0; std::getline(datosProceso, proceso, ' '); columna++){
  11. switch(columna){
  12. case 0:
  13. nombreProceso = proceso;
  14. break;
  15. case 1:
  16. tiempoCPU = std::stoi(proceso);
  17.    break;
  18. }
  19. }
  20.                Cola->encolar(nombreProceso, tiempoCPU);
  21. }


Título: Re: Lectura de fichero de texto en c++ el programa no ejecuta
Publicado por: DarkSun812 en 17 Marzo 2022, 03:44 am
Soy nuevo en esto de c++ y mi martirio ha sido la lectura de ficheros, pero en esa busqueda he encontrado una manera de leer los archivos de texto mucho mas sencilla. Supongamos que tienes un archivo de texto con el siguiente formato.

colum11 colum12
colum21 colum22
colum31 colum32
colum41 colum42

Si ejecutas el siguiente codigo podras acceder a cada columna.
Código
  1. char x,y;
  2. string filename("archivo.txt");
  3. ifstream input_file(filename);
  4. while(input_file >> x >> y)
  5. {
  6. cout << x << ' ' << y << endl;
  7. }
  8.  

Con el codigo anterior el item de la columna 1 de la primera fila se guardara en la variable x y la columna dos se guardara en la columna y. El codigo te deberia dar una salida similar a la siguiente.
Citar
colum11 colum12
colum21 colum22
colum31 colum32
colum41 colum42

Con lo que ahora puedes trabajar cada elemento como quieras.





Código
  1. std::ifstream archivoProcesos("Procesos.txt");
  2. NodoProceso* Cola;
  3. std::string linea;
  4. std::string nombreProceso;
  5. int tiempoCPU;
  6. for(std::string proceso; std::getline(archivoProcesos, linea); ){
  7.  
  8. std::istringstream datosProceso(linea);
  9.  
  10. for(int columna = 0; std::getline(datosProceso, proceso, ' '); columna++){
  11. switch(columna){
  12. case 0:
  13. nombreProceso = proceso;
  14. break;
  15. case 1:
  16. tiempoCPU = std::stoi(proceso);
  17.    break;
  18. }
  19. }
  20.                Cola->encolar(nombreProceso, tiempoCPU);
  21. }

Puede ser que el error este en el for, ya que estoy viendo que en la segunda llamada de este
Código
  1. for(int columna = 0; std::getline(datosProceso, proceso, ' '); columna++){
  2.  

Creo estas encerrando en la variable proceso el contenido del getline, intenta crear una variable tipo string a parte y ponla ahi en vez de usar proceso. OJO repito que no conozco mucho de c++ Solo estoy dando una idea segun los problemas que me han dado a mi codigos anteriores. Segundo punto, seguro de que la funcion getline debe usarse en ese caso?? Me refiero a cuando la usas por segunda vez con la variable proceso.