Проблема замены слова файла с помощью cmd в C - PullRequest
0 голосов
/ 13 мая 2018

Здравствуйте, я создал программу, которая заменяет букву на другую с помощью cmd.Но у меня есть проблемы, пытающиеся заменить целое слово.Я новичок в использовании файлов, поэтому я пытался использовать fgets и fputs, но у меня не было результатов.: /

Это мой код:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

//Function's prototypes
void atributos(int argc,char *argv[]);
void SustChar(char *argv[]);


//MAIN
int main(int argc, char *argv[]){


FILE *ptrf;
ptrf=fopen(argv[1],"r");
if(ptrf==NULL){
    printf("No se pudo abrir el archivo\n");
    exit(1);
}
else{
    fclose(ptrf);
    atributos(argc,argv);
}

    return 0;
}

//attributes


void atributos(int argc,char *argv[]){
    if(strcmp(argv[2],"S")==0)
    SustChar(argv);
}

//Replace words


void SustChar(char *argv[]){
    char c[80];

FILE *ptrf;
ptrf=fopen(argv[1],"r");
    FILE *ptrs;
    ptrs=fopen(argv[5],"w");

    while(!feof(ptrf)){    


    c=fgetc(ptrf);
    if(c==*argv[3])
        fputc(*argv[4],ptrs);
    else
        fputc(c,ptrs);    
}
    fclose(ptrs);
    fclose(ptrf);

}

Синтаксис, который я использую в cmd: .exeName origin.txt S oldword newword destiny.txt

Пример Sintaxis

1 Ответ

0 голосов
/ 13 мая 2018

Чтобы сравнить всю строку, можно использовать fgets для чтения строки и использовать strcmp для сравнения с третьим аргументом:

void SustChar(char *argv[]){
    char linebuf[80];
    FILE *ptrf;
    ptrf = fopen(argv[1],"r");
    FILE *ptrs;
    ptrs = fopen(argv[5],"w");
    // read line into a linebuf
    while(fgets(linebuf, 80, ptrf) != NULL){    
        linebuf[strlen(linebuf)-2] = '\0'; // remove newline character
        // if the line matches the third argument
        if (!strcmp(linebuf, argv[3])) {
            fputs(argv[4], ptrs);
        } else {
            fputs(linebuf, ptrs);    
        }
    }
    fclose(ptrs);
    fclose(ptrf);
}    

Если вас интересует конкретное слово в этой строке, предполагая, что словаограничены одним пробелом, можно использовать функцию strchr для извлечения слов, а затем сравнить их с третьим аргументом.

void SustChar(char *argv[]){
    char linebuf[80];
    FILE *ptrf;
    ptrf = fopen(argv[1],"r");
    FILE *ptrs;
    ptrs = fopen(argv[5],"w");
    // read one line into a linebuf
    while(fgets(linebuf, 80, ptrf) != NULL) {
        // remove newline character
        linebuf[strlen(linebuf)-2] = '\0';
        // get a pointer to the second word in the line
        char *secondword = strchr(strchr(linebuf, ' ') + 1, ' ');
        assert(secondword != NULL);
        // get length of the second word
        char *thirdword = strchr(secondword , ' ');
        size_t secondwordlen = thirdword == NULL ? strlen(secondword) : thirdword - secondword;
        // if the second word matches the third argument
        if (!memcmp(secondword , argv[3], secondwordlen)) {
            secondword[0] = '\0'; // remove second word from linebuf
            fputs(linebuf, ptrs); // print first word
            fputs(argv[3], ptrs); // print second word substituted by argv[3]
            fputs(thirdword, ptrs); // print the rest of the line
        } else {
            fputs(linebuf, ptrs);    
        }
    }
    fclose(ptrs);
    fclose(ptrf);
}
...