Autor
|
Tema: Como comparar un string con una palabra dentro de un documeto de texto (Leído 3,232 veces)
|
lordluisiv
Desconectado
Mensajes: 66
|
Buenas espero que todos esten bien. bueno creo que ya el titulo explica todo, aqui estan las librerias que uso y la el string que quiero comparar... #include <stdio.h> #include <stdlib.h> #include <string.h>
FILE *doc; char DATA_B[3][12];
int main(){
strcpy(DATA_B[0],"Var1"); strcpy(DATA_B[1],"Var2"); strcpy(DATA_B[2],"Var3"); ............ .................. ............................
aqui es donde leo los e imprimo los datos del documento de texto, no logro que compare el string con la palabra que esta escrita en el documento. ejm: doc.txt{ Var1= 12 Var2= 13 Var3= 99 }
y en el programa solo imprimir el 12, 13, 99
pero no lo logro hacer, si me pudieran ayudar pls { doc = fopen("registro.txt","r"); char read; char palabra; if(doc == NULL) { printf("ERROR EN EL ARCHIVO"); return 1; } printf("\n\n\t--------Datos Cargados--------\n"); while((read = getc(doc)) != EOF) { palabra += read; if(read == '\n'|| strcmp(palabra, DATA_B[0]) == 0 && read == '=') { printf("\n"); }else{ printf("%c",read); } } fclose(doc); return 1; }
|
|
|
En línea
|
|
|
|
K-YreX
|
No entiendo muy bien lo que pretendes hacer, ni lo que haces, ya que lo que estás guardando es {"Var1" / "Var2" / "Var3"} pero en ningún momento estás guardando los números con el "=". Además <palabra> es un <char> cuando creo que lo que querías es que fuera un array de <char>. Y creo que esto no se cumple nunca: palabra += read; strcmp(palabra , DATA_B [0]) == 0 && read == '='
Porque cuando <palabra> es igual a <DATA_B[0]> ("Var1") en <read> todavía tienes almacenado el "1". Cuando en <read> tienes almacenado el "=", en <palabra> ya tendrías "Var1=" (asumiendo que corrijas lo de que <palabra> es un array).
|
|
|
En línea
|
cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
|
|
|
lordluisiv
Desconectado
Mensajes: 66
|
No entiendo muy bien lo que pretendes hacer, ni lo que haces, ya que lo que estás guardando es {"Var1" / "Var2" / "Var3"} pero en ningún momento estás guardando los números con el "=". Además <palabra> es un <char> cuando creo que lo que querías es que fuera un array de <char>. Y creo que esto no se cumple nunca: palabra += read; strcmp(palabra , DATA_B [0]) == 0 && read == '='
Porque cuando <palabra> es igual a <DATA_B[0]> ("Var1") en <read> todavía tienes almacenado el "1". Cuando en <read> tienes almacenado el "=", en <palabra> ya tendrías "Var1=" (asumiendo que corrijas lo de que <palabra> es un array). lo que trato de hacer es guardar los caracteres de la palabra "Var1" pero no se como hacerlo, lo que trato de hacer es esto. https://foro.elhacker.net/programacion_cc/cguardar_y_cargar_datos_de_un_fichero_txt-t494053.0.htmlNo sé qué parte es la que quieres que te explique pero imagino que es la solución a tu pregunta. Tienes un fichero de texto que guarda: string (VARIABLE) + char (A/B/C) + char (=) + int (numero) Lo que tú haces es guardar caracter a caracter en <c> e ir mostrándolos. En lugar de eso crea una variable de tipo <string>, otras dos de tipo <char> y otra de tipo <int>. Entonces guardas en la de tipo <string> la palabra "VARIABLE", en la primera de tipo <char> la letra y en la segunda el "=" y en la de tipo <int> el número. Entonces puedes mostrar sólo la de tipo <int> para mostrar el número o hacer un condicional que si la variable que guarda la letra es igual a {A, B, C} muestre el valor de la de tipo <int> y sino no. Una vez tienes toda la información del fichero en variables puedes hacer lo que quieras con ello. Las variables las puedes sobreescribir para ahorrar en memoria ya que siempre vas a guardar "VARIABLE" e "=". Si quieres almacenar cada letra con su número correspondiente de forma más "permanente" (que puedas usarlas luego en el programa) entonces ya podrías hacerlo con un array de <char> y otro de <int> o usando clases o estructuras. Pero para lo que quieres hacer no es necesario. jeje aun sigo intentando pero no lo logro
|
|
|
En línea
|
|
|
|
K-YreX
|
Vale. Todo depende de cómo estés guardando esos datos. Tienes varias opciones como pueden ser: - Pedir al usuario la cadena entera (no te lo recomiendo... el usuario siempre tiende a equivocarse y tenemos que vigilar todo lo que hace )
- Pedir al usuario el numero y el resto de la cadena lo creamos nosotros
- No pedir nada al usuario y establecer unos valores fijos en tiempo de compilacion
- Estan los datos en el fichero y tenemos que cogerlos de ahi
Según la opción que quieras implementar, tenemos que seguir unas restricciones u otras. Si no es la opción 4, yo te recomendaría la segunda opción, te evitas los problemas de la primera y no pierdes tanta funcionalidad como en la tercera (estoy suponiendo que nosotros conocemos los nombres de las variables de antemano, es decir, que van a ser "var1", "var2", etc) Si lo que quieres es que el usuario introduzca el nombre que el quiera para la variable, entonces hay que implementar la primera opción. Coméntame cuál se adapta mejor a lo que quieres/necesitas e intentaré echarte una mano desde lo más básico para corregir el problema de raíz.
|
|
|
En línea
|
cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
|
|
|
lordluisiv
Desconectado
Mensajes: 66
|
Vale. Todo depende de cómo estés guardando esos datos. Tienes varias opciones como pueden ser: - Pedir al usuario la cadena entera (no te lo recomiendo... el usuario siempre tiende a equivocarse y tenemos que vigilar todo lo que hace )
- Pedir al usuario el numero y el resto de la cadena lo creamos nosotros
- No pedir nada al usuario y establecer unos valores fijos en tiempo de compilacion
- Estan los datos en el fichero y tenemos que cogerlos de ahi
Según la opción que quieras implementar, tenemos que seguir unas restricciones u otras. Si no es la opción 4, yo te recomendaría la segunda opción, te evitas los problemas de la primera y no pierdes tanta funcionalidad como en la tercera (estoy suponiendo que nosotros conocemos los nombres de las variables de antemano, es decir, que van a ser "var1", "var2", etc) Si lo que quieres es que el usuario introduzca el nombre que el quiera para la variable, entonces hay que implementar la primera opción. Coméntame cuál se adapta mejor a lo que quieres/necesitas e intentaré echarte una mano desde lo más básico para corregir el problema de raíz. quiero algo parecido a la 4ta opcion, lo que quiero hacer es como un sistema de guardado, que busque el nombre de X variable y cargue su contenido
|
|
|
En línea
|
|
|
|
K-YreX
|
Entonces no tiene ningún sentido que guardes los datos en la matriz usando <strcpy()> como has hecho. Lo que tienes que hacer es: de un fichero que ya tiene las variables guardadas con su valor y todo, meterlas en una matriz. Te dejo un ejemplo mejor que ir caracter a caracter... #define MAX_SIZE 20 int main(){ FILE *fichero; fichero = fopen("fichero.txt", "r"); char registro[MAX_SIZE][MAX_SIZE]; int num_variables = 0; // numero de variables/lineas del fichero fgets(registro [num_variables ++], MAX_SIZE , fichero ); num_variables--; }
Luego tienes que pedir una palabra/variable y buscar en la matriz si está y si está devolver el valor que está a la derecha del "=". Mírate las funciones de la librería <string.h> ya que son de utilidad para este ejercicio. PD: Te recomiendo pedir la palabra usando la función <fgets()> (tendrás que hacer una pequeña modificación para quitar el ENTER que le des al terminar de escribir la palabra). Vete probando lo que te comento y cuando te quedes bloqueado, intento ayudarte más específicamente ya que ahora estoy ocupado. Suerte
|
|
|
En línea
|
cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
|
|
|
lordluisiv
Desconectado
Mensajes: 66
|
Entonces no tiene ningún sentido que guardes los datos en la matriz usando <strcpy()> como has hecho. Lo que tienes que hacer es: de un fichero que ya tiene las variables guardadas con su valor y todo, meterlas en una matriz. Te dejo un ejemplo mejor que ir caracter a caracter... #define MAX_SIZE 20 int main(){ FILE *fichero; fichero = fopen("fichero.txt", "r"); char registro[MAX_SIZE][MAX_SIZE]; int num_variables = 0; // numero de variables/lineas del fichero fgets(registro [num_variables ++], MAX_SIZE , fichero ); num_variables--; }
Luego tienes que pedir una palabra/variable y buscar en la matriz si está y si está devolver el valor que está a la derecha del "=". Mírate las funciones de la librería <string.h> ya que son de utilidad para este ejercicio. PD: Te recomiendo pedir la palabra usando la función <fgets()> (tendrás que hacer una pequeña modificación para quitar el ENTER que le des al terminar de escribir la palabra). Vete probando lo que te comento y cuando te quedes bloqueado, intento ayudarte más específicamente ya que ahora estoy ocupado. Suerte Ok muchas gracias, tratare hacerlo así
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Encontrar palabra dentro de un texto...
Programación Visual Basic
|
Edu
|
5
|
2,747
|
11 Septiembre 2010, 17:57 pm
por Edu
|
|
|
Buscar caracter dentro de un string y evitar recorte de palabra
Programación Visual Basic
|
fx700
|
0
|
2,672
|
28 Octubre 2011, 23:39 pm
por fx700
|
|
|
Buscar una palabra dentro de un string
Programación C/C++
|
kur79
|
3
|
16,251
|
18 Febrero 2019, 19:48 pm
por Loretz
|
|
|
Buscar una palabra dentro de un string (PHP / Buscador)
Desarrollo Web
|
Leguim
|
2
|
1,996
|
17 Febrero 2019, 14:52 pm
por Leguim
|
|
|
[Android] Como puedo obtener el item en un string para comparar en el if?
Java
|
@XSStringManolo
|
2
|
3,180
|
9 Noviembre 2019, 17:17 pm
por @XSStringManolo
|
|