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

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


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

Desconectado Desconectado

Mensajes: 26


Ver Perfil
Asunto con archivos C
« en: 29 Mayo 2019, 08:13 am »

Hola como estan, tengo una duda sobre archivos en c. Bueno lo que pasa es que requiero buscar algo dentro del archivo que acabo de crear es decir por ejemplo si pongo la clave ST1 me salga la informacion de eso en pantalla dicha informacion se encuentra en el archivo



Código
  1.  
  2. FILE *archivo;
  3. void reservaciones(){
  4. char claveHabitacion[][20]= {"ST1"};
  5. char *ptr=claveHabitacion[0];
  6.  
  7. archivo = fopen("ejemplo.txt", "a+");
  8. fprintf(archivo, "\n La clave es: %s", ptr);
  9. fwrite(&ptr, sizeof(ptr), 1, archivo);
  10.  
  11. }
  12.  
  13.  
  14. //main(){ //Aqui es donde deberia escribir ST1 y que me saliera la informacion que llegase a guardar ahi. como seria para buscar dentro del archivo y llamarlo desde el main
  15.  
  16. fread(); // se me ocurrio leer
  17.  
  18.  
  19.  
  20.  
  21.  
  22. }
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  


En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: Asunto con archivos C
« Respuesta #1 en: 29 Mayo 2019, 08:35 am »

<fwrite()/fread()> son funciones para trabajar con ficheros en modo binario. Te recomiendo que no uses esos y te limites a usar <fgets> para leer cadenas del fichero y <fprintf()> para escribirlas.
Lo que debes hacer es abrir el fichero en modo lectura e ir leyendo por ejemplo la primera palabra de cada línea, si esta coincide con la que buscas, guardas el resto de la línea en otra variable y terminas. Si no coincide, lees el resto de la línea (porque el acceso es secuencial, no aleatorio) y pruebas con la primera palabra de la siguiente línea.


En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Jay

Desconectado Desconectado

Mensajes: 26


Ver Perfil
Re: Asunto con archivos C
« Respuesta #2 en: 29 Mayo 2019, 21:01 pm »

Un ejemplo masomenos ?
En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: Asunto con archivos C
« Respuesta #3 en: 29 Mayo 2019, 21:27 pm »

Supongamos que tienes un fichero "datos.txt" cuyo contenido es:
Código:
ESTADO HABITACIONES
ST1 Libre
ST2 Ocupada
ST3 Libre
Que indica la clave de cada habitación y si está Libre/Ocupada. Y queremos buscar el estado de una habitación en concreto.

Código
  1. #define MAX_SIZE 100 // longitud para guardar una palabra
  2.  
  3. int main(){
  4.    FILE *fichero;
  5.    fichero = fopen("datos.txt", "r"); // abrimos el fichero en modo lectura
  6.    char *clave_buscada = "ST2"; // clave que queremos buscar
  7.    char palabra_actual[MAX_SIZE], estado_buscado[MAX_SIZE];
  8.    bool encontrado = false; // si no quieres usar <stdbool.h> usa int encontrado = 0
  9.  
  10.    fgets(palabra_actual, MAX_SIZE, fichero); // guardamos la primera linea que no sirve para nada
  11.    while(!feof(fichero) and !encontrado){ // mientras no lleguemos al final del fichero y no hayamos encontrado la palabra que buscamos
  12.        fscanf(fichero, "%s", palabra_actual); // guardamos una palabra
  13.        fgets(estado_buscado, MAX_SIZE, fichero); // guardamos el resto de la linea
  14.        if(strncmp(clave_buscada, palabra_actual, 3) == 0) // comparamos los 3 primeros caracteres con la clave que buscamos y si son iguales...
  15.            encontrado = true; // ...indicamos que ya la hemos encontrado para salir antes del bucle. Si no se ha usado bool, cambiar por encontrado = 1
  16.    }
  17.  
  18.    if(encontrado) // si la hemos encontrado
  19.        printf("La informacion de %s es: %s\n", clave_buscada, estado_buscado);
  20. }
Se puede usar una sola variable (palabra_actual / estado). He usado 2 para que se vea más visual lo que hacemos. La clave yo la he elegido como he querido, lo suyo es pedírsela al usuario y elegir el formato que tendrá tu fichero y adaptarlo para que funcione. En el ejemplo te muestro cómo funciona tanto <fgets()> como <fscanf()> para que veas las diferencias.
El resto ya te queda a ti. :-X
(El código no lo he probado por lo que puede tener algún error del que no me haya dado cuenta)
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Jay

Desconectado Desconectado

Mensajes: 26


Ver Perfil
Re: Asunto con archivos C
« Respuesta #4 en: 30 Mayo 2019, 00:46 am »

si medio te entiendo estuve realizando este en c++ algo asi necesito pero no se como pasarlo a c ahi diferencias por ejemplo la librerai fstream no se como seria en c si puedieras orientarme un poco
Código
  1.  
  2.  
  3. #include<cstdlib>
  4. #include<iostream>
  5. #include<fstream>
  6. #include<string.h>
  7. using namespace std;
  8. void altas();
  9. void bajas();
  10. void buscar();
  11. void consultas();
  12. void modificaciones();
  13. void salir();
  14. void menu();
  15. //Variables Globales
  16. char nombre[30],grupo[10],resp[1];
  17. int semestre=0, edad=0;
  18. bool encontrado=false;
  19. char auxGrupo[10];
  20. int main(){
  21.    menu();
  22.    return 0;
  23.    system("PAUSE");
  24. }
  25. void menu(){
  26.    int opcion=0;
  27.    do{
  28.        cout<<"Manejo de Archivos en C++"<<endl;
  29.        cout<<"1. Altas"<<endl;
  30.        cout<<"2. Bajas"<<endl;
  31.        cout<<"3. Consultas"<<endl;
  32.        cout<<"4. Buscar un Registro"<<endl;
  33.        cout<<"5. Modificaciones"<<endl;
  34.        cout<<"6. Salir"<<endl;
  35.        cout<<"Que deseas hacer? ";
  36.        cin>>opcion;
  37.        switch(opcion){
  38.            case 1:
  39.                altas();
  40.            break;
  41.            case 2:
  42.                bajas();
  43.            break;
  44.            case 3:
  45.                consultas();
  46.            break;
  47.            case 4:
  48.                buscar();
  49.            break;
  50.            case 5:
  51.                modificaciones();
  52.            break;
  53.            case 6:
  54.                salir();
  55.            break;
  56.            default:
  57.                cout<<"¡Opcion Incorrecta!"<<endl;
  58.        }
  59.    }while(opcion!=6);
  60. }//Fin funcion menu
  61. void altas(){
  62.    ofstream escritura;
  63.    escritura.open("alumnos.txt",ios::out|ios::app);
  64.    if(escritura.is_open()){
  65.        cout<<"Ingresa el nombre del Alumno: ";
  66.        cin>>nombre;
  67.        cout<<"Ingresa el Semestre del Alumno: ";
  68.        cin>>semestre;
  69.        cout<<"Ingresa el Grupo del Alumno: ";
  70.        cin>>grupo;
  71.        cout<<"Ingresa la Edad del Alumno: ";
  72.        cin>>edad;
  73.        escritura<<nombre<<" "<<semestre<<" "<<grupo<<" "<<edad<<endl;
  74.    }else{
  75.        cout<<"Error, el Archivo No se Pudo Abrir"<<endl;
  76.    }
  77.    escritura.close();
  78. }//Fin funcion altas
  79.  
  80. void consultas(){
  81.    ifstream lectura;
  82.    lectura.open("alumnos.txt",ios::out|ios::in);
  83.    if(lectura.is_open()){
  84.        cout<<"Registros del Archivo alumnos.txt"<<endl;
  85.        cout<<"________________________________"<<endl;
  86.        lectura>>nombre;
  87.        while(!lectura.eof()){
  88.            lectura>>semestre;
  89.            lectura>>grupo;
  90.            lectura>>edad;
  91.            cout<<"Nombre: "<<nombre<<endl;
  92.            cout<<"Semestre: "<<semestre<<endl;
  93.            cout<<"Grupo: "<<grupo<<endl;
  94.            cout<<"Edad: "<<edad<<endl;
  95.            lectura>>nombre;
  96.            cout<<"________________________________"<<endl;
  97.        }
  98.    }else{
  99.        cout<<"Error, el Archivo No se Pudo Abrir, No ha sido creado"<<endl;
  100.    }
  101.    lectura.close();
  102. }//Fin funcion consultas
  103.  
  104. void bajas(){
  105. }
  106. void buscar(){
  107.    ifstream lectura;//Creamos la variable de tipo lectura
  108.    lectura.open("alumnos.txt",ios::out|ios::in);//Abrimos el archivo
  109.    //validando la apertura del archivo
  110.    if(lectura.is_open()){
  111.        cout<<"Ingresa el Grupo que deseas Buscar: ";
  112.        cin>>auxGrupo;
  113.        lectura>>nombre;//lectura adelantada
  114.        encontrado=false;
  115.        while(!lectura.eof()){
  116.            lectura>>semestre>>grupo>>edad;//leyendo los campos del registro
  117.            //Comparar cada registro para ver si es encontrado
  118.            if(strcmp(auxGrupo,grupo)==0){
  119.                cout<<"______________________________"<<endl;
  120.                cout<<"Nombre: "<<nombre<<endl;
  121.                cout<<"Semestre: "<<semestre<<endl;
  122.                cout<<"Grupo: "<<grupo<<endl;
  123.                cout<<"Edad: "<<edad<<endl;
  124.                cout<<"______________________________"<<endl;
  125.                encontrado=true;
  126.            }
  127.            lectura>>nombre;//lectura adelantada
  128.        }
  129.        if(encontrado==false){
  130.            cout<<"No hay registros con el Grupo "<<auxGrupo<<endl;
  131.        }
  132.    }else{
  133.        cout<<"No se pudoAbrir el Archivo, aun no ha sido Creado"<<endl;
  134.    }
  135.    //cerrando el archivo
  136.    lectura.close();
  137. }
  138. void modificaciones(){
  139. }
  140. void salir(){
  141.    cout<<"Programa Finalizado"<<endl;
  142. }
  143.  
  144.  
  145.  
  146.  
  147.  
En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: Asunto con archivos C
« Respuesta #5 en: 30 Mayo 2019, 09:08 am »

Los ficheros en C son <FILE*>.
Busca información sobre trabajar con ficheros en C para orientarte más.
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Asunto
Nivel Web
WiseHidden 1 2,432 Último mensaje 23 Diciembre 2010, 02:07 am
por volteo0101
Asunto « 1 2 »
Sugerencias y dudas sobre el Foro
.:UND3R:. 10 6,554 Último mensaje 6 Octubre 2011, 22:07 pm
por .:UND3R:.
El asunto de los DNS
Redes
isaaxlol 2 2,549 Último mensaje 17 Diciembre 2011, 21:20 pm
por thonyc
Asunto
GNU/Linux
m@xdil@n 1 1,721 Último mensaje 6 Julio 2012, 17:45 pm
por Maldito karma
Asunto
Software
carry dj 0 1,264 Último mensaje 6 Julio 2012, 05:26 am
por carry dj
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines