Autor
|
Tema: buscar en un fichero c++ (Leído 6,814 veces)
|
br7
|
estoy haciendo un progrma q buscar palabras en fichero pero necesito ayuda con este codigo lo q necesito es q busqua q lo guarde en un fichero nuevo q creo con el nombre de la palabra q ingreso ejemplo primero te pide el nombre del fichero mifichero.txt el deve estar en donde esta el programas y despues podide q ingrese la palabra a buscar por ejemplo ingreso en la buscar y muestra en donde esta y cuantas hay pero lo q buscar quiero q lo guarde en el fichero q creo con la palabra en solo necesito como es para q yo puede guardar el resultado en ese fichero nuevo
char texto[100000000],arch[1000],letras[100]; int n,sum=0; int contador = 0, encontrado = 0; char cadena[256], buscar[100],nombre[25],buscrear[50]; char *a; FILE *f,*crear;
main() { printf("Ingrese el nombre del archivo del block de notas: ");
f = fopen(gets(arch),"r"); if(f==NULL) { perror ("Error al abrir archivo"); return -1; } printf("\nEL CONTENIDO DEL FICHERO ES :\n\n"); while (fgets(texto,100000000,f) != NULL) { cout<<texto; } if (f != NULL) { printf("\nIngrese la palabra/frase que desea buscar en el archivo %s:\n\n\t\t\t\t", nombre); fflush(stdin); //limpiar scanf("%[^\n]", buscar); //scanf("%[^\n]");
strcpy(buscrear, buscar); //copia la cadena
strcat(buscrear,".txt"); //crear archivos crear=fopen(buscrear,"a+w");
rewind(f); //reguesar
contador = 0;
encontrado = 0;
while (!feof(f)) //retorna diferente de 0 { contador++;
fgets(cadena,256,f);
a = strtok(cadena,",.- ");
while (a != NULL) { if (!strcmp(buscar, a)) //comprar { encontrado++; if(encontrado==1) { printf("%s Linea ",a); } //if
printf("%d ", contador);
}//if a = strtok (NULL, " "); }//while 2 }//while 1 if(encontrado>=1) { printf(",apareciones total :%d", encontrado); } //arch2.close(); if (encontrado <= 0) { printf("\nLa palabra o frase no se encontro en el archivo %s.\n", nombre); } } fclose(crear); fclose(f); getchar(); getchar(); }
gracias
|
|
|
En línea
|
codigoenespanol.blogspot.com
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
* En buen plan lo primero que debes hacer es mejorar tu ortografía, si no entendemos el mensaje no es posible ayudar a resolver el problema. * Cuando publiques código fuente por favor utiliza las etiquetas de código. Estas se agregan mediante el cuadro desplegable con el texto "GeSHi" en la pagina de composición de mensajes, solo tienes que seleccionar ahí el lenguaje (C, C++, etc.). * No utilices la función gets como tampoco fflush(stdin). Mas información en la pagina |Lo que no hay que hacer en C/C++. Nivel basico|---- En C++ puedes utilizar la clase string y la funcion getline para leer cada una de las lineas de texto que componen un archivo. Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
Vaagish
Desconectado
Mensajes: 875
|
y despues podide q ingrese la palabra a buscar por ejemplo ingreso en la buscar y muestra en donde esta y cuantas hay pero lo q buscar quiero Wow! Quiero pensar que su lengua nativa no es el español.
|
|
|
En línea
|
|
|
|
br7
|
comprendo pero tengo otro problema como vacio una varriable tipo char en c++ tengo una variable tipo char dentro de un for que cada vez que corre le pide al usuario que ingrese una palabra y cada vez que el for corre el usuario ingresa una palabra distinta, digamos el programa pide cuantas palabras quiere ingresar el usuario dice 4 el for va a corre 4 veces y cada vez que pide la palabra el usuario tiene que ingresar una palabra distinta que la anterior pero yo la quiero capturar en la misma variable como hago eso? que cada vez que corra capture una palabra diferente pero en la misma variable dice que poniendo ==NULL pero no funcio y otro dice que coloque que es igual a ='\0' pero no funciona nose como hacerlo gracias de antemano char texto[100000000],arch[1000],letras[100]; int d; char buscar[100],nombre[25],buscrear[50]; FILE *f; ofstream entrada; main() { cout<<"Ingrese el nombre del archivo del block de notas con extension .txt: \n"; f = fopen(gets(arch),"r"); if(f==NULL) { perror("Error al abrir archivo"); return -1; } cout<<"\nEL CONTENIDO DEL FICHERO ES :\n\n"; while (fgets(texto,100000000,f) != NULL) { cout<<texto; } if (f != NULL) { cout<<"\n\ncuantas palabras va a buscar\n\n "; cin>>d; for(int c=1;c<=d;c++) { buscar[c] ='\0'; /*YO PIESNO QUE AQUI ESTA EL PROBLEMA YO QUIERO QUE SE VACIE PARA VOLVER A LLENARLA ABAJO CON OTRA FASE PERO NO SE COMO SE HACER */ printf("\n\nIngrese la palabra/frase que desea buscar en el archivo %s:\n\n\t\t\t\t",nombre); fflush(stdin); scanf("%[^\n]",buscar); strcpy(buscrear, buscar); strcat(buscrear,".txt"); entrada.open(buscrear,ios::out); if(entrada==NULL) { perror("Error al abrir archivo"); return -1; } if(entrada!=NULL) { cout<<"\nArchivo creado con exito"; } } } fclose(f); getchar(); getchar(); }
|
|
|
En línea
|
codigoenespanol.blogspot.com
|
|
|
Vaagish
Desconectado
Mensajes: 875
|
En este preciso momento, recien llegue del trabajo,, se me ocurre strcpy( buscar[c], " " ) ; o con memset, mañana te doy una mejor ayuda..
Saludos!
|
|
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
El programa hay que rescribirlo desde cero ya que de C++ tiene bien poco, casi todo es C. Y como ya te comente no debes utilizar gets como tampoco fflush(stdin), por favor lee la pagina |Lo que no hay que hacer en C/C++. Nivel basico|No necesitas "vaciar" una variable, solo tienes que utilizar un objeto de la clase string para leer ahí la palabra verificando que la lectura fue exitosa, nada mas. Por ejemplo: #include <iostream> using std::cin; using std::cout; using std::endl; #include <string> using std::string; int main() { cout << "Cuantas palabras? "; int num_pals; cin >> num_pals; for (int i = 0; i != num_pals; ++i){ cout << "Teclea la palabra: "; string palabra; if (cin >> palabra) cout << "La palabra " << (i + 1) << " es " << palabra << endl; else break; } return 0; }
Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
Vaagish
Desconectado
Mensajes: 875
|
En realidad no me había detenido a leer el código, y mucho menos la consigna (costaba entender bastante) Sigue los consejos de rir3760, esta mucho mas limpio ese código.
Saludos!
|
|
|
En línea
|
|
|
|
br7
|
Gracias me ayudo vastan lo que decia rir3760
|
|
|
En línea
|
codigoenespanol.blogspot.com
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
@ br7: las recomendaciones sobre libros, por desgracia todos ellos en ingles, se encuentran en el tema Presentación y dudas . Otra opción es el libro Thinking in C++ de Bruce Eckel, desde su pagina principal puedes descargar su versión original en ingles o la versión (en desarrollo) en español. Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
|
|