1 votes

remplacement de chaînes de caractères dans un fichier en utilisant C

Je ne l'ai pas encore mis en œuvre, j'en suis encore au stade de la réflexion, mais je dois parcourir un fichier et remplacer une certaine chaîne par une autre. Par exemple,

<img src="/images/logo.gif" ...

devrait devenir

<img src="/proxy/www.example.com/images/logo.gif" ...

Des conseils sur la façon dont je peux aborder cette question ? Peut-être existe-t-il des fonctions C de "remplacement de chaîne" qui feraient cela pour moi et que je ne connais pas... ?

Actuellement, si je devais écrire cette fonction moi-même, je lui donnerais comme paramètres le fichier, la chaîne à remplacer, la chaîne de remplacement. Ensuite, je parcourrais manuellement le fichier à la recherche d'une occurrence de la chaîne et je la recréerais. Cela semble toutefois très inefficace. Existe-t-il de meilleures façons de procéder ?

Merci, Hristo

0voto

nategoose Points 8011

Vous devriez étudier la commande sed. Voyez ce qu'elle fait et faites quelque chose de similaire.

Il fonctionne comme un filtre, donc lorsqu'on l'utilise pour remplacer quelque chose dans un fichier, ce qu'on fait souvent, c'est capturer la sortie dans un fichier, puis remplacer l'ancien fichier par le nouveau.

0voto

TechEdge Points 1

Vous pouvez utiliser le programme suivant pour rechercher et remplacer une chaîne de caractères dans un fichier.

int main()

{

.....

replaceIPAddress( "System.cfg", "172.16.116.157", "127.0.0.1");

.....

}

void replaceIPAddress( char * confFileName, char *text_to_find , char *text_to_replace  )

{

FILE *input = fopen(confFileName, "r");

FILE *output = fopen("temp.txt", "w");

char buffer[512];

while (fgets(buffer, sizeof(buffer), input) != NULL)
{
    char *pos = strstr(buffer, text_to_find);
    if (pos != NULL)
    {
        /* Allocate memory for temporary buffer */
        char *temp = calloc(
                strlen(buffer) - strlen(text_to_find) + strlen(text_to_replace) + 1, 1);

        /* Copy the text before the text to replace */
        memcpy(temp, buffer, pos - buffer);

        /* Copy in the replacement text */
        memcpy(temp + (pos - buffer), text_to_replace, strlen(text_to_replace));

        /* Copy the remaining text from after the replace text */
        memcpy(temp + (pos - buffer) + strlen(text_to_replace),
                pos + strlen(text_to_find),
                1 + strlen(buffer) - ((pos - buffer) + strlen(text_to_find)));

        fputs(temp, output);

        free(temp);
    }
    else
        fputs(buffer, output);
}

fclose(output);
fclose(input);

/* Rename the temporary file to the original file */
rename("temp.txt", confFileName);

}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X