¿Cómo puedo copiar algunas cadenas de un archivo a otro usando programación en C?
Tengo este código:
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *ptr = fopen("data.txt","r");
char filename[100];
if (ptr==NULL)
{
printf("no existe el archivo.");
return 0;
}
char buf[100];
while (fscanf(ptr,"%*s %*s %s ",buf)==1) {
if(buf[strlen(buf)-1] == '5') {
printf("%s\n", buf);
FILE *fptr2;
printf("Crea un archivo \n");
scanf("%s", filename);
fptr2 = fopen(filename, "w");
if (fptr2 == NULL)
{
printf("No se puede abrir el archivo %s \n", filename);
exit(0);
}
FILE *fptr1 = fopen("data.txt", "r");
if (fptr1 == NULL)
{
printf("No se puede abrir el archivo %s \n", filename);
exit(0);
}
int c = fgetc(fptr1);
while (c != EOF)
{
if(c == '\n'){
fprintf(fptr2, "\n");
c = fgetc(fptr1);
continue;
}
char r[100];
fscanf(fptr1, "%s", r);
if(r[strlen(r)-1] == '5'){
fprintf(fptr2, "%s ", r);
}
c = fgetc(fptr1);
}
printf("\nContenido copiado a %s", filename);
fclose(fptr1);
fclose(fptr2);
return 0;
}
}
Copia todo el contenido desde un archivo a otro. Necesito copiar sólo las cadenas que tienen el número 5
como último caracter (en la tercera columna).
Por ejemplo, el archivo Data.txt se ve así:
Alek 10B 4
Juan 10A 3
Kate 10C 5
En el archivo que crearé durante la ejecución solo debe copiarse la cadena Kate 10C 5
. He estado intentando durante horas pero no sé cómo hacerlo. ¿Me puedes ayudar?
davy.ai
Para copiar solo las cadenas que tienen un
5
como último carácter (en la tercera columna), puede modificar el buclewhile
que lee del archivo de la siguiente manera:Aquí,
buf
contiene la cadena leída del archivo. Comprobamos si el último carácter en la cadena es'5'
(el carácter'5'
entre comillas simples representa el valor ASCII del dígito 5). Si el último carácter es efectivamente'5'
, escribimos la cadena en el archivo de salida utilizando la funciónfprintf
.Tenga en cuenta que he reemplazado
fputc
porfprintf
en este fragmento de código, porque necesitamos escribir una cadena (no un solo carácter) en el archivo de salida.En general, su código modificado para copiar solo las cadenas con ‘5’ como último carácter podría verse así:
Tenga en cuenta que este código no se ha probado, por lo que es posible que necesite realizar algunas modificaciones menores dependiendo de los requisitos exactos o el entorno específico en el que lo esté ejecutando.</string.h></stdlib.h></stdio.h>