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

[SOLUCIONADO] Leer palabras de una linea de un fichero

Estas en el tema de Leer palabras de una linea de un fichero en el foro de C/C++ en Foros del Web. Hola tengo un problema... bueno estoy tratando de hacer un método en C++ POO que haga lo siguiente: Leer las palabras de una linea dentro ...
  #1 (permalink)  
Antiguo 01/05/2014, 10:40
 
Fecha de Ingreso: abril-2014
Mensajes: 8
Antigüedad: 10 años, 6 meses
Puntos: 1
Información Leer palabras de una linea de un fichero

Hola tengo un problema... bueno estoy tratando de hacer un método en C++ POO que haga lo siguiente:

Leer las palabras de una linea dentro de un fichero

El fichero tendría estos datos:

PEPE 2 IDIOMA1 IDIOMA2
JOSE 1 IDIOMA1
ALEJANDRO 4 IDIOMA1 IDIOMA2 IDIOMA3 IDIOMA4

y básicamente lo que intento hacer es obtener de cada linea su palabra correspondiente y el número (que representa el numero de idiomas de cada registro) para almacenarlo dentro de una clase en C++

Última edición por Alvarocq; 01/05/2014 a las 12:53
  #2 (permalink)  
Antiguo 01/05/2014, 16:11
 
Fecha de Ingreso: marzo-2014
Ubicación: Buenos Aires
Mensajes: 59
Antigüedad: 10 años, 8 meses
Puntos: 0
Respuesta: Leer palabras de una linea de un fichero

Hola, para leer una linea completa de un txt podrias usar

Código C++:
Ver original
  1. #include <iostream>
  2. #include <fstream>
  3. using namespace std;
  4.  
  5. int main(){
  6.     ifstream entrada("prueba.txt");
  7.     string linea;
  8.    
  9.     getline(entrada,linea); //toma la linea del archivo de entrada
  10.     while(!entrada.eof()){ // mientras no se terminen de las lineas del archivo sigue leyendo
  11.         getline(entrada,linea); //toma la siguiente linea del archivo de entrada
  12.     }
  13.     return 0;
  14. }
  #3 (permalink)  
Antiguo 01/05/2014, 23:11
Principe_Azul
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Leer palabras de una linea de un fichero

Hola Alvarocq!

Bueno estube haciendo el código que necesitás y lo logré
Lo que si tené en cuenta algo importante, para que el código pueda funcionar perfectamente, debés agregar un signo - luego de ingresar la cantidad de idiomas de cada persona.
Esto lo hice así y siempre lo hice y me funciona perfectamente, porque para mí es una manera fácil de llegar desde un X valor a otro, esos signos o símbolos, me ayudan siempre!!!

El archivo debe llamarse Personas.txt y debe estar en el mismo directorio/carpeta que el programa C++.

Adentro del archivo Personas.txt agregá así a las personas:

PEPE 2- IDIOMA1 IDIOMA2
JOSE 1- IDIOMA1
ALEJANDRO 4- IDIOMA1 IDIOMA2 IDIOMA3 IDIOMA4



Y con un salto de línea al final del archivo, osea que debe quedar siempre una línea vacía en la última línea del archivo Personas.txt, recordá que el nombre del archivo es Personas y la extensión .txt:

Aquí está el código:

Código C++:
Ver original
  1. #include <windows.h>
  2. #include <iostream>
  3. #include <stdio.h>
  4. #include <fstream>
  5. #include <vector>
  6.  
  7. using namespace std;
  8.  
  9.  
  10. class BuscaNombres {
  11.     char Linea[1280];
  12.     string LineaString;
  13.  
  14. public:
  15.     void Cantidad(string &LineaString) {
  16.         int GuardaNum;
  17.         GuardaNum = LineaString.find_first_of("-");
  18.         LineaString = LineaString.substr(0,GuardaNum);
  19.     }
  20.     void Mostrar() {
  21.         vector<string> Archivo(0);
  22.         ifstream Lectura("Personas.txt");
  23.         Lectura.getline(Linea, 1280);
  24.         string LineaString = Linea;
  25.         Cantidad(LineaString);
  26.         Archivo.push_back(LineaString);
  27.         while (!Lectura.eof()) {
  28.             Lectura.getline(Linea, 1280);
  29.                 if (strlen(Linea) != 0) {
  30.                     string LineaString = Linea;
  31.                     Cantidad(LineaString);
  32.                     Archivo.push_back(LineaString);
  33.             }
  34.         }
  35.         Lectura.close();
  36.         // Comienza la lectura del vector Archivo:
  37.         for (int Nums = 0; Nums < Archivo.size(); Nums++)
  38.             cout << Archivo[Nums] << endl;
  39.     }
  40. } Nombres;
  41.  
  42. int main() {
  43.     Nombres.Mostrar();
  44. }

El programa lee el archivo dentro de una clase como vos querías. La clase es publica

Buena suerte!!

PD: Podés cambiar el nombre de archivo por el que vos desees.
  #4 (permalink)  
Antiguo 02/05/2014, 08:24
 
Fecha de Ingreso: abril-2014
Mensajes: 8
Antigüedad: 10 años, 6 meses
Puntos: 1
Respuesta: Leer palabras de una linea de un fichero

Cita:
Iniciado por Principe_Azul Ver Mensaje
Hola Alvarocq!

Bueno estube haciendo el código que necesitás y lo logré
Lo que si tené en cuenta algo importante, para que el código pueda funcionar perfectamente, debés agregar un signo - luego de ingresar la cantidad de idiomas de cada persona.
Esto lo hice así y siempre lo hice y me funciona perfectamente, porque para mí es una manera fácil de llegar desde un X valor a otro, esos signos o símbolos, me ayudan siempre!!!

El archivo debe llamarse Personas.txt y debe estar en el mismo directorio/carpeta que el programa C++.

Adentro del archivo Personas.txt agregá así a las personas:

PEPE 2- IDIOMA1 IDIOMA2
JOSE 1- IDIOMA1
ALEJANDRO 4- IDIOMA1 IDIOMA2 IDIOMA3 IDIOMA4



Y con un salto de línea al final del archivo, osea que debe quedar siempre una línea vacía en la última línea del archivo Personas.txt, recordá que el nombre del archivo es Personas y la extensión .txt:

Aquí está el código:

Código C++:
Ver original
  1. #include <windows.h>
  2. #include <iostream>
  3. #include <stdio.h>
  4. #include <fstream>
  5. #include <vector>
  6.  
  7. using namespace std;
  8.  
  9.  
  10. class BuscaNombres {
  11.     char Linea[1280];
  12.     string LineaString;
  13.  
  14. public:
  15.     void Cantidad(string &LineaString) {
  16.         int GuardaNum;
  17.         GuardaNum = LineaString.find_first_of("-");
  18.         LineaString = LineaString.substr(0,GuardaNum);
  19.     }
  20.     void Mostrar() {
  21.         vector<string> Archivo(0);
  22.         ifstream Lectura("Personas.txt");
  23.         Lectura.getline(Linea, 1280);
  24.         string LineaString = Linea;
  25.         Cantidad(LineaString);
  26.         Archivo.push_back(LineaString);
  27.         while (!Lectura.eof()) {
  28.             Lectura.getline(Linea, 1280);
  29.                 if (strlen(Linea) != 0) {
  30.                     string LineaString = Linea;
  31.                     Cantidad(LineaString);
  32.                     Archivo.push_back(LineaString);
  33.             }
  34.         }
  35.         Lectura.close();
  36.         // Comienza la lectura del vector Archivo:
  37.         for (int Nums = 0; Nums < Archivo.size(); Nums++)
  38.             cout << Archivo[Nums] << endl;
  39.     }
  40. } Nombres;
  41.  
  42. int main() {
  43.     Nombres.Mostrar();
  44. }

El programa lee el archivo dentro de una clase como vos querías. La clase es publica

Buena suerte!!

PD: Podés cambiar el nombre de archivo por el que vos desees.

Gracias por el interés, pero lo que yo busco es obtener cada palabra para poder almacenarlo en un objeto es decir, obtener los datos para tratarlo de esta forma:

Código PHP:

cEmpleados 
aux = new cEmpleados();
 
aux->setNombre(auxNOMBRE_EMPLEADO_REGISTRO_OBTENIDO);
 
aux->setNumeIdiomas(auxNUMIDIOMAS_EMPLEADO_REGISTRO_OBTENIDO);
 
aux->setIdiomas(auxIDIOMAS_EMPLEADO_REGISTRO_OBTENIDO);

        
  if(
empleados[contarEmpleados]->NuevoEmpleado(aux) || auxNUMIDIOMAS_EMPLEADO <6){

 
cout<<"Empleado almacenado correctamente"<<endl;
  
empleados[contarEmpleados]->MostrarEmpleados();    
  
contarEmpleados++;
 }
else {
cout<<"Error al intentar almacenar empleado"<<endl;

PD: Me parece que tendré que crear a mano un archivo binario con X registros y luego obtener los datos correspondientes... te parece buena la idea ?

Última edición por Alvarocq; 02/05/2014 a las 08:27 Razón: Detalle
  #5 (permalink)  
Antiguo 02/05/2014, 12:18
 
Fecha de Ingreso: abril-2014
Mensajes: 8
Antigüedad: 10 años, 6 meses
Puntos: 1
Respuesta: Leer palabras de una linea de un fichero

Bueno pues pego el código por si alguien lo necesita.

Código PHP:
void cAgencia::IMPORT_Empleado(){
typedef struct{
    
char NombreEmpleado_R[30];
    
char IdiomaEmpleado_R1[30];
    
char IdiomaEmpleado_R2[30];
    
char IdiomaEmpleado_R3[30];
    
char IdiomaEmpleado_R4[30];
    
char IdiomaEmpleado_R5[30];
    
int NumIdiomasEmpleado_R;

}
Empleados_Registros;
        
    
string IDIOMAS_IMPORT[5]; int i 0;
    
FILEfile fopen("Archivo.dat""rb");
    if(
file == NULL){
        
cout<<"Error al intentar abrir el archivo ";
    }
    else {
        

        
Empleados_Registros R1;
        
int i 0;
        while(
fread(&R1sizeof(Empleados_Registros),1,file)){
            
cout <<"\nPosicion del Registro Obtenido : "<<i++<<endl;
            
cout<<"Datos: "<<R1.NombreEmpleado_R<<" "<<R1.NumIdiomasEmpleado_R<<" "<< R1.IdiomaEmpleado_R1<<" "<< R1.IdiomaEmpleado_R2<<" "<< R1.IdiomaEmpleado_R3<<" "<< R1.IdiomaEmpleado_R4<<" "<< R1.IdiomaEmpleado_R5<<endl;             

            
IDIOMAS_IMPORT[0] = R1.IdiomaEmpleado_R1;
            
IDIOMAS_IMPORT[1] = R1.IdiomaEmpleado_R2;
            
IDIOMAS_IMPORT[2] = R1.IdiomaEmpleado_R3;
            
IDIOMAS_IMPORT[3] = R1.IdiomaEmpleado_R4;
            
IDIOMAS_IMPORT[4] = R1.IdiomaEmpleado_R5;

                
empleados[contarEmpleados] = new cEmpleados();
                
empleados[contarEmpleados]->setNombre(R1.NombreEmpleado_R);
                
empleados[contarEmpleados]->setNumeIdiomas(R1.NumIdiomasEmpleado_R);
                
empleados[contarEmpleados]->setPackedIdiomas(IDIOMAS_IMPORT);
                
empleados[contarEmpleados]->MostrarEmpleados();            
                
contarEmpleados++;
            
        }
    }
    
fclose(file);


Última edición por Alvarocq; 02/05/2014 a las 12:37 Razón: Error encontrado
  #6 (permalink)  
Antiguo 02/05/2014, 13:53
Principe_Azul
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Leer palabras de una linea de un fichero

Todo lo que te sirva y funcione siempre va a ser buena idea.

Etiquetas: fichero, int, palabras
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 20:40.