Autor
|
Tema: Asunto con archivos C (Leído 2,151 veces)
|
Jay
Desconectado
Mensajes: 26
|
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 FILE *archivo; void reservaciones(){ char claveHabitacion[][20]= {"ST1"}; char *ptr=claveHabitacion[0]; archivo = fopen("ejemplo.txt", "a+");fprintf(archivo , "\n La clave es: %s", ptr ); fwrite(&ptr , sizeof(ptr ), 1, archivo ); } //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 fread(); // se me ocurrio leer }
|
|
|
En línea
|
|
|
|
K-YreX
|
<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
|
cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
|
|
|
Jay
Desconectado
Mensajes: 26
|
Un ejemplo masomenos ?
|
|
|
En línea
|
|
|
|
K-YreX
|
Supongamos que tienes un fichero "datos.txt" cuyo contenido es: 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. #define MAX_SIZE 100 // longitud para guardar una palabra int main(){ FILE *fichero; fichero = fopen("datos.txt", "r"); // abrimos el fichero en modo lectura char *clave_buscada = "ST2"; // clave que queremos buscar char palabra_actual[MAX_SIZE], estado_buscado[MAX_SIZE]; bool encontrado = false; // si no quieres usar <stdbool.h> usa int encontrado = 0 fgets(palabra_actual , MAX_SIZE , fichero ); // guardamos la primera linea que no sirve para nada while(!feof(fichero ) and !encontrado ){ // mientras no lleguemos al final del fichero y no hayamos encontrado la palabra que buscamos fscanf(fichero , "%s", palabra_actual ); // guardamos una palabra fgets(estado_buscado , MAX_SIZE , fichero ); // guardamos el resto de la linea if(strncmp(clave_buscada , palabra_actual , 3) == 0) // comparamos los 3 primeros caracteres con la clave que buscamos y si son iguales... encontrado = true; // ...indicamos que ya la hemos encontrado para salir antes del bucle. Si no se ha usado bool, cambiar por encontrado = 1 } if(encontrado) // si la hemos encontrado printf("La informacion de %s es: %s\n", clave_buscada , estado_buscado ); }
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.  (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
|
cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
|
|
|
Jay
Desconectado
Mensajes: 26
|
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 #include<cstdlib> #include<iostream> #include<fstream> #include<string.h> using namespace std; void altas(); void bajas(); void buscar(); void consultas(); void modificaciones(); void salir(); void menu(); //Variables Globales char nombre[30],grupo[10],resp[1]; int semestre=0, edad=0; bool encontrado=false; char auxGrupo[10]; int main(){ menu(); return 0; system("PAUSE"); } void menu(){ int opcion=0; do{ cout<<"Manejo de Archivos en C++"<<endl; cout<<"1. Altas"<<endl; cout<<"2. Bajas"<<endl; cout<<"3. Consultas"<<endl; cout<<"4. Buscar un Registro"<<endl; cout<<"5. Modificaciones"<<endl; cout<<"6. Salir"<<endl; cout<<"Que deseas hacer? "; cin>>opcion; switch(opcion){ case 1: altas(); break; case 2: bajas(); break; case 3: consultas(); break; case 4: buscar(); break; case 5: modificaciones(); break; case 6: salir(); break; default: cout<<"¡Opcion Incorrecta!"<<endl; } }while(opcion!=6); }//Fin funcion menu void altas(){ ofstream escritura; escritura.open("alumnos.txt",ios::out|ios::app); if(escritura.is_open()){ cout<<"Ingresa el nombre del Alumno: "; cin>>nombre; cout<<"Ingresa el Semestre del Alumno: "; cin>>semestre; cout<<"Ingresa el Grupo del Alumno: "; cin>>grupo; cout<<"Ingresa la Edad del Alumno: "; cin>>edad; escritura<<nombre<<" "<<semestre<<" "<<grupo<<" "<<edad<<endl; }else{ cout<<"Error, el Archivo No se Pudo Abrir"<<endl; } escritura.close(); }//Fin funcion altas void consultas(){ ifstream lectura; lectura.open("alumnos.txt",ios::out|ios::in); if(lectura.is_open()){ cout<<"Registros del Archivo alumnos.txt"<<endl; cout<<"________________________________"<<endl; lectura>>nombre; while(!lectura.eof()){ lectura>>semestre; lectura>>grupo; lectura>>edad; cout<<"Nombre: "<<nombre<<endl; cout<<"Semestre: "<<semestre<<endl; cout<<"Grupo: "<<grupo<<endl; cout<<"Edad: "<<edad<<endl; lectura>>nombre; cout<<"________________________________"<<endl; } }else{ cout<<"Error, el Archivo No se Pudo Abrir, No ha sido creado"<<endl; } lectura.close(); }//Fin funcion consultas void bajas(){ } void buscar(){ ifstream lectura;//Creamos la variable de tipo lectura lectura.open("alumnos.txt",ios::out|ios::in);//Abrimos el archivo //validando la apertura del archivo if(lectura.is_open()){ cout<<"Ingresa el Grupo que deseas Buscar: "; cin>>auxGrupo; lectura>>nombre;//lectura adelantada encontrado=false; while(!lectura.eof()){ lectura>>semestre>>grupo>>edad;//leyendo los campos del registro //Comparar cada registro para ver si es encontrado if(strcmp(auxGrupo,grupo)==0){ cout<<"______________________________"<<endl; cout<<"Nombre: "<<nombre<<endl; cout<<"Semestre: "<<semestre<<endl; cout<<"Grupo: "<<grupo<<endl; cout<<"Edad: "<<edad<<endl; cout<<"______________________________"<<endl; encontrado=true; } lectura>>nombre;//lectura adelantada } if(encontrado==false){ cout<<"No hay registros con el Grupo "<<auxGrupo<<endl; } }else{ cout<<"No se pudoAbrir el Archivo, aun no ha sido Creado"<<endl; } //cerrando el archivo lectura.close(); } void modificaciones(){ } void salir(){ cout<<"Programa Finalizado"<<endl; }
|
|
|
En línea
|
|
|
|
K-YreX
|
Los ficheros en C son <FILE*>. Busca información sobre trabajar con ficheros en C para orientarte más.
|
|
|
En línea
|
cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Asunto
Nivel Web
|
WiseHidden
|
1
|
2,617
|
23 Diciembre 2010, 02:07 am
por volteo0101
|
|
|
Asunto
« 1 2 »
Sugerencias y dudas sobre el Foro
|
.:UND3R:.
|
10
|
7,435
|
6 Octubre 2011, 22:07 pm
por .:UND3R:.
|
|
|
El asunto de los DNS
Redes
|
isaaxlol
|
2
|
2,884
|
17 Diciembre 2011, 21:20 pm
por thonyc
|
|
|
Asunto
GNU/Linux
|
m@xdil@n
|
1
|
2,044
|
6 Julio 2012, 17:45 pm
por Maldito karma
|
|
|
Asunto
Software
|
carry dj
|
0
|
1,583
|
6 Julio 2012, 05:26 am
por carry dj
|
|