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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  copiar una palabra de un archivo en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: copiar una palabra de un archivo en C  (Leído 5,089 veces)
FR-32

Desconectado Desconectado

Mensajes: 3


Ver Perfil
copiar una palabra de un archivo en C
« en: 10 Marzo 2014, 07:08 am »

buen dia, necesito ayuda con esto porfavor!!!

.....en un archivo ya creado estan los siguientes datos:

agregar(001,serrucho,100.00,5)
agregar(010,martillo,20.00,10)
agregar(012,escalera,300.00,10)

lo que tengo q hacer es leer linea por linea y copiar a otro archivo unicamente los datos encerrados en los parentesis (), alguna idea q me pudieran dar para hacerlo se los agradeceria mucho.... GRACIAS!!!


En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: copiar una palabra de un archivo en C
« Respuesta #1 en: 10 Marzo 2014, 07:25 am »

abre block de notas, pega toda la info haces click en edicion, asllí clickeas reemplazar

en el cuadro colocas
buscar: "agregar("
reemplazar:

(dejas reemplazar en vacio y no coloques las comillas)
presionas "reemplazar todo"

eso se habrá eliminado ese termino (si no tienes más paréntesis libres por ahí)

repites con el ")"

por favor responde si ter sirvió


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
SrCooper

Desconectado Desconectado

Mensajes: 137


Bazinga!


Ver Perfil
Re: copiar una palabra de un archivo en C
« Respuesta #2 en: 10 Marzo 2014, 08:07 am »

Puedes recorrer la línea caracter por caracter y cuando llegues a un paréntesis empiezas a copiar a otro archivo y cuando llegues a ')' paras de copiar.

Yo lo que haría sería algo así:

Código
  1. bool hayQueCopiar = false;
  2. for (...){  //recorres el archivo
  3.    if (caracter == '(' ) hayQueCopiar = true;
  4.    if (caracter == ')' ) hayQueCopiar = false;
  5.    if (hayQueCopiar) copia_a_archivo(caracter);
  6. }
  7.  

Un saludo

« Última modificación: 10 Marzo 2014, 15:57 pm por SrCooper » En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: copiar una palabra de un archivo en C
« Respuesta #3 en: 10 Marzo 2014, 08:47 am »


Puedes recorrer la línea caracter por caracter y cuando llegues a un paréntesis empiezas a copiar a otro archivo y cuando llegues a ')' paras de copiar.
.......................................

¿Y por qué no copiarlo todo de golpe?.

Esta es mi salida al ejecutar el código que propongo y lo que justamente escribe en el fichero de salida:

Citar
agregar001,serrucho,100.00,5
agregar010,martillo,20.00,10
agregar012,escalera,300.00,10

Process returned 0 (0x0)   execution time : 1.099 s
Press any key to continue.


Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define NOM_ARCHIVO_IN   "Entrada3.txt"
  6. #define NOM_ARCHIVO_OUT  "Entrada4.txt"
  7. #define NUM_CHARS     256
  8.  
  9. int main(void){
  10.   FILE *entrada,*salida;
  11.   char linea[NUM_CHARS],linea_out[NUM_CHARS];
  12.   char *p;
  13.  
  14.   if ((entrada = fopen(NOM_ARCHIVO_IN, "r")) == NULL){
  15.      perror(NOM_ARCHIVO_IN);
  16.      return EXIT_FAILURE;
  17.   }
  18.  
  19.   if ((salida = fopen(NOM_ARCHIVO_OUT, "w")) == NULL){
  20.      perror(NOM_ARCHIVO_OUT);
  21.      return EXIT_FAILURE;
  22.   }
  23.    while (fgets(linea, NUM_CHARS, entrada) != NULL){
  24.    p = strtok (linea,"()");
  25.    while (p != NULL ) {
  26.      if (strcmp(p,"agregar"))
  27.          strcpy(linea_out,p);
  28.          fprintf(salida,"%s",linea_out);
  29.          printf ("%s",p);
  30.          p = strtok (NULL, "()");
  31.      }
  32.    }
  33.  
  34.    fclose(entrada);
  35.    fclose(salida);
  36.    return EXIT_SUCCESS;
  37. }

¡¡¡¡ Saluditos! ..... !!!!


« Última modificación: 10 Marzo 2014, 14:26 pm por leosansan » En línea

FR-32

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: copiar una palabra de un archivo en C
« Respuesta #4 en: 11 Marzo 2014, 03:12 am »

muchas gracias!!!! por tomarse el tiempo de responder, enserio me ayudarona(y)
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: copiar una palabra de un archivo en C
« Respuesta #5 en: 11 Marzo 2014, 04:06 am »

Otra opción, una vez se obtenga la linea del archivo, es utilizar la función strchr para encontrar las posiciones de los caracteres '(' y ')'. Por ejemplo:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main(void)
  6. {
  7.   char *linea[] = {
  8.      "agregar(001,serrucho,100.00, 5)",
  9.      "agregar(010,martillo, 20.00,10)",
  10.      "agregar(012,escalera,300.00,10)"
  11.   };
  12.   size_t num_lineas = sizeof linea / sizeof linea[0];
  13.   size_t i;
  14.  
  15.   char *p;
  16.   char *q;
  17.  
  18.   for (i = 0; i < num_lineas; i++)
  19.      if ((p = strchr(linea[i], '(')) && (q = strchr(++p, ')')) && q > p)
  20.         printf("%.*s\n", (int) (q - p), p);
  21.  
  22.   return EXIT_SUCCESS;
  23. }

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
Yoel Alejandro

Desconectado Desconectado

Mensajes: 254



Ver Perfil WWW
Re: copiar una palabra de un archivo en C
« Respuesta #6 en: 12 Marzo 2014, 03:44 am »

Bueno, opino que el enfoque de Cooper es el mismo que tomó leosansan, pero el primero más a mano y el segundo formalizado por medio de la función strtok()

La idea de rir creo que no necesita mejoras (como siempre  :D), aunque yo me quiero referir a la propuesta que se basa en la bonita función strtok() cuya finalidad es precisamente analizar léxicamente una expresión.

Pero hay un detallito leosansan, y es que la palabra "agregar" creo que no debe ir. Analicemos el funcionamiento de strtok(): En la primera ejecución debería buscar '(', en cuyo caso extrae de la cadena la frase "agregar", es decir, justo antes del '('. La segunda llamada debería ser con el divisor ')', en cuyo caso toma lo que está después del anterior '(' y antes del siguiente ')'. Ya no se necesitan más llamadas en esa línea del archivo.

Con leves modificaciones, propongo el programa así (el printf ("%s\n",p) es sólo para propósitos de verificar el resultado):
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define NOM_ARCHIVO_IN   "Entrada3.txt"
  6. #define NOM_ARCHIVO_OUT  "Entrada4.txt"
  7. #define NUM_CHARS     256
  8.  
  9. int main(void) {
  10.  
  11.   FILE *entrada,*salida;
  12.   char linea[NUM_CHARS],linea_out[NUM_CHARS];
  13.   char *p, *q;
  14.  
  15.   if ((entrada = fopen(NOM_ARCHIVO_IN, "r")) == NULL){
  16.   perror(NOM_ARCHIVO_IN);
  17.   return EXIT_FAILURE;
  18.   }
  19.  
  20.   if ((salida = fopen(NOM_ARCHIVO_OUT, "w")) == NULL){
  21.   perror(NOM_ARCHIVO_OUT);
  22.   return EXIT_FAILURE;
  23.   }
  24.   while (fgets(linea, NUM_CHARS, entrada) != NULL) {
  25.  
  26.      if ( ( p = strtok (linea, "(") ) == NULL ) continue;
  27.      if ( ( p = strtok (NULL, ")") ) == NULL ) continue;
  28.      printf ("%s\n", p);
  29.      fprintf(salida,"%s\n", p);
  30.   }
  31.  
  32.   fclose(entrada);
  33.   fclose(salida);
  34.   return EXIT_SUCCESS;
  35. }

cuya salida:

001,serrucho,100.00,5
010,martillo,20.00,10
012,escalera,300.00,10


==========================================
EDITO:

A juzgar por el problema original, pareciera que se tiene un fichero de órdenes que deben ser interpretadas (algo como un script ejecutable). En ese caso podría ser deseable separar los agumentos de la función agregar, a través del token ','. Para lo cual es ideal usar de nuevo la strtok(). Considérese que la primera llamada debe ser con la cadena de argumentos como primer parámetro y las posteriores con NULL, por eso los punteros p y q. Esta versión separa los argumentos con un '\n' (haciendo como una pila de ellos), aunque pudiera usarse un '\t', un espacio, etc:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define NOM_ARCHIVO_IN   "Entrada3.txt"
  6. #define NOM_ARCHIVO_OUT  "Entrada4.txt"
  7. #define NUM_CHARS     256
  8.  
  9. int main(void) {
  10.  
  11.   FILE *entrada,*salida;
  12.   char linea[NUM_CHARS],linea_out[NUM_CHARS];
  13.   char *p, *q;
  14.  
  15.   if ((entrada = fopen(NOM_ARCHIVO_IN, "r")) == NULL){
  16.   perror(NOM_ARCHIVO_IN);
  17.   return EXIT_FAILURE;
  18.   }
  19.  
  20.   if ((salida = fopen(NOM_ARCHIVO_OUT, "w")) == NULL){
  21.   perror(NOM_ARCHIVO_OUT);
  22.   return EXIT_FAILURE;
  23.   }
  24.   while (fgets(linea, NUM_CHARS, entrada) != NULL) {
  25.  
  26.      if ( ( p = strtok (linea, "(") ) == NULL ) continue;
  27.      if ( ( p = strtok (NULL, ")") ) == NULL ) continue;
  28.      q = p;
  29.      while ( ( p = strtok (q, ",") ) != NULL ) {
  30.         printf ("%s\n", p);
  31.         fprintf(salida,"%s\n", p);
  32.         q = NULL;
  33.      }
  34.   }
  35.  
  36.   fclose(entrada);
  37.   fclose(salida);
  38.   return EXIT_SUCCESS;
  39. }

con la salida:

001
serrucho
100.00
5
010
martillo
20.00
10
012
escalera
300.00
10


Saludos!!
« Última modificación: 12 Marzo 2014, 03:56 am por yoel_alejandro » En línea

Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: copiar una palabra de un archivo en C
« Respuesta #7 en: 12 Marzo 2014, 04:21 am »

* En el primero de los códigos apoyo la intención pero está mal implementado, sencillamente no furula.

* EL segundo no cumple las expectativas que el autor planteo: leer de un tirón lo que hay entre los paréntesis y tu código  "desparrama" los datos en un fichero. Fíjate lo estricto que soy con las peticiones de los usuarios, no me gusta salirme del guión que ellos marcan porque posiblemente no es eso lo que ellos quieran, aunque a nosotros nos parezca otra cosa.

* Y tercero, siempre aprendiendo cosas nuevas, como en el caso del aporte de rir3760, pero si no, no me gusta perder ni jugando a las chapas. :laugh: :laugh: :laugh:


¡¡¡¡ Saluditos! ..... !!!!





« Última modificación: 13 Marzo 2014, 06:53 am por leosansan » En línea

Yoel Alejandro

Desconectado Desconectado

Mensajes: 254



Ver Perfil WWW
Re: copiar una palabra de un archivo en C
« Respuesta #8 en: 13 Marzo 2014, 01:05 am »

Leosansan, cuándo hablas de códigos, ¿te refieres a los míos?

Si es así, por qué dices que el primero no funciona. ¿Lo ejecutaste? Su salida es:

001,serrucho,100.00,5
010,martillo,20.00,10
012,escalera,300.00,10

entonces ¿por qué no funciona?

Ahora, lo que dijo el usuario fue "unicamente los datos encerrados en los parentesis ()", lo cual excluye la palabra "agregar", precisamente por ello presenté el primer código.

El segundo programa que propuse es por lo que inferí de las palabras del autor del tema, aunque reconozco que el no lo pidió exactamente así. Pero bien, él dijo "los datos encerrados entre paréntesis", y al referirse a "los datos" me imagino que es sin las comas. Por eso el segundo programa muestra los datos separados. Pero creo que deberíamos esperar que sea el autor del post quién sentencie al respecto y nos diga cómo era que lo quería  :D
En línea

Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: copiar una palabra de un archivo en C
« Respuesta #9 en: 13 Marzo 2014, 06:51 am »

Sorry!, creo que equivoqué la respuesta.

++Sorry!.


¡¡¡¡ Saluditos! ..... !!!!


« Última modificación: 13 Marzo 2014, 06:54 am por leosansan » En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Buscar palabra dentro de un archivo « 1 2 »
Programación C/C++
Riki_89D 10 13,985 Último mensaje 11 Agosto 2010, 21:28 pm
por Riki_89D
como buscar palabra en un archivo de txt
Programación C/C++
AprendizPRG 1 12,222 Último mensaje 17 Junio 2012, 14:54 pm
por 0xDani
Quitar una palabra de un nombre de archivo con bat
Mensajería
Roble44 1 4,648 Último mensaje 18 Diciembre 2013, 23:10 pm
por Stakewinner00
Buscar y reemplazar palabra en archivo
Programación C/C++
fran7385 3 5,034 Último mensaje 28 Enero 2014, 22:47 pm
por ivancea96
Programa para copiar una palabra
Programación C/C++
TonietFB 4 2,578 Último mensaje 17 Noviembre 2014, 17:28 pm
por rir3760
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines