Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: lordluisiv en 3 Abril 2019, 03:19 am



Título: Como comparar un string con una palabra dentro de un documeto de texto
Publicado por: lordluisiv en 3 Abril 2019, 03:19 am
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...
Código:
#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
Código:
{
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;
}


Título: Re: Como comparar un string con una palabra dentro de un documeto de texto
Publicado por: K-YreX en 3 Abril 2019, 10:23 am
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:
Código
  1. palabra += read;
  2. 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). 


Título: Re: Como comparar un string con una palabra dentro de un documeto de texto
Publicado por: lordluisiv en 4 Abril 2019, 03:06 am
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:
Código
  1. palabra += read;
  2. 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.html (https://foro.elhacker.net/programacion_cc/cguardar_y_cargar_datos_de_un_fichero_txt-t494053.0.html)

No 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:
Código:
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



Título: Re: Como comparar un string con una palabra dentro de un documeto de texto
Publicado por: K-YreX en 4 Abril 2019, 04:12 am
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  :xD)
  • 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. :-X


Título: Re: Como comparar un string con una palabra dentro de un documeto de texto
Publicado por: lordluisiv en 4 Abril 2019, 20:50 pm
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  :xD)
  • 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. :-X

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


Título: Re: Como comparar un string con una palabra dentro de un documeto de texto
Publicado por: K-YreX en 4 Abril 2019, 22:00 pm
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...
Código
  1. #define MAX_SIZE 20
  2.  
  3. int main(){
  4.    FILE *fichero;
  5.    fichero = fopen("fichero.txt", "r");
  6.    char registro[MAX_SIZE][MAX_SIZE];
  7.    int num_variables = 0; // numero de variables/lineas del fichero
  8.    while(!feof(fichero))
  9.        fgets(registro[num_variables++], MAX_SIZE, fichero);
  10.    num_variables--;
  11. }

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 :-X


Título: Re: Como comparar un string con una palabra dentro de un documeto de texto
Publicado por: lordluisiv en 5 Abril 2019, 11:53 am
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...
Código
  1. #define MAX_SIZE 20
  2.  
  3. int main(){
  4.    FILE *fichero;
  5.    fichero = fopen("fichero.txt", "r");
  6.    char registro[MAX_SIZE][MAX_SIZE];
  7.    int num_variables = 0; // numero de variables/lineas del fichero
  8.    while(!feof(fichero))
  9.        fgets(registro[num_variables++], MAX_SIZE, fichero);
  10.    num_variables--;
  11. }

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 :-X

Ok muchas gracias, tratare hacerlo así