Changer un mot en un autre

snpier wolf Messages postés 216 Date d'inscription samedi 11 août 2007 Statut Membre Dernière intervention 30 mai 2011 - 17 sept. 2007 à 23:14
snpier wolf Messages postés 216 Date d'inscription samedi 11 août 2007 Statut Membre Dernière intervention 30 mai 2011 - 19 sept. 2007 à 19:23
bon soire a tous,
j'ais encors une question.
Commant fair pour qu'un mot qui se trouve dans un texte.txt soit remplacé par un autre mot??
exemple :
-----------------------------
Ce chien est fou!
je suis sur que s'ais ton chien.
------------------------------
Ce chat est fou!
je suis sur que s'ais ton chat.

merci d'avence.
a++

12 réponses

cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
17 sept. 2007 à 23:47
S'il a la même taille t'écris par dessus directement sinon il faut sortir tout le fichier dans un buffer remplacer le mot et le remettre dans le fichier.
acx01b Messages postés 280 Date d'inscription dimanche 7 septembre 2003 Statut Membre Dernière intervention 8 juillet 2014 6
18 sept. 2007 à 10:09
salut

sais-tu le faire dans le cas d'une chaine de caractère ?

par exemple saurais tu écrire une fonction
void remplacer (char *phrase, char *ancien_mot, char *nouveau_mot);

char *phrase = strdup("une phrase");
remplacer(phrase,"une", "une tres longue");
printf(phrase); // affiche: une tres longue phrase
snpier wolf Messages postés 216 Date d'inscription samedi 11 août 2007 Statut Membre Dernière intervention 30 mai 2011
18 sept. 2007 à 12:48
bonjour à tous,
justement ma question était peut être pas clair, en fait je veux que dans un texte qui est encors inconut,
tout les chien par exemple sois remplacé par chat .
bien entendus on ne sais pas ou sont écris les mot chien
merci d'avence
a++ 
acx01b Messages postés 280 Date d'inscription dimanche 7 septembre 2003 Statut Membre Dernière intervention 8 juillet 2014 6
18 sept. 2007 à 16:45
oui on est d'accord

mais ma question c'était est-ce que si ce texte est contenue dans une chaine de caractère (un char*) tu saurais écrire la fonction qui effectue ce remplacement ?

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
snpier wolf Messages postés 216 Date d'inscription samedi 11 août 2007 Statut Membre Dernière intervention 30 mai 2011
18 sept. 2007 à 16:53
lol
C'est la question que je pause. non je ne sais pas le fair.
quelqu'un peux m'aider s.v.p?
snpier wolf Messages postés 216 Date d'inscription samedi 11 août 2007 Statut Membre Dernière intervention 30 mai 2011
18 sept. 2007 à 17:12
j'ais dis quelqu'un peut m'aider
mais j'aurais du dire quelqu'un peut nous aider s.v.p?
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
18 sept. 2007 à 19:16
1- tu charge le fichier dans un buffer
2- tu modifie ce que tu veux
3- tu ecrit le buffer

En gros ca te donne un truc comme ca:

void __stdcall Replace(char *psz, char *szmotif, char *sznew) // de BruNews
{
int m, n;
char *c, *d;
m = strlen(szmotif);
if(!m) return;
c = psz;
n = strlen(sznew);
if(!n) goto supprime;
if(n > m) goto superieur;
if(n < m) goto inferieur;
if(!strcmp(szmotif, sznew)) return;
while(d = strstr(c, szmotif)) {
memcpy(d, sznew, n);
c = d + n;
}
return;
inferieur:
while(d = strstr(c, szmotif)) {
memcpy(d, sznew, n);
c = d + n;
strcpy(c, d + m);
}
return;
superieur:
while(d = strstr(c, szmotif)) {
memmove(d + n, d + m, strlen(d + m) + 1);
memcpy(d, sznew, n);
c = d + n;
}
return;
supprime:
while(d = strstr(c, szmotif)) {
strcpy(d, d + m);
c = d;
}
}

int WINAPI WinMain(HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
HANDLE hFile;
DWORD br, bw, FileSize;
BYTE* Buffer;
hFile = CreateFile("C:\\ton_fichier.txt", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_ALWAYS, 0, 0);
FileSize = GetFileSize(hFile, 0);
Buffer = (BYTE*) HeapAlloc(GetProcessHeap(), HEAP_NO_SERIALIZE, (FileSize*2));
ReadFile(hFile, Buffer, FileSize, &br, 0);
Replace(Buffer, "mot_a_remplacer", "mot_qui_remplace");
SetFilePointer(hFile, 0, 0, FILE_BEGIN);
WriteFile(hFile, Buffer, strlen(Buffer), &bw, 0);
SetEndOfFile(hFile);
CloseHandle(hFile);
HeapFree(GetProcessHeap(), HEAP_NO_SERIALIZE, Buffer);
return 0;
}

Neo_Fr
acx01b Messages postés 280 Date d'inscription dimanche 7 septembre 2003 Statut Membre Dernière intervention 8 juillet 2014 6
19 sept. 2007 à 13:50
salut

la fonction remplacer je l'ai écrite comme ça:

#include <stdio.h>


void remplacer(char *s, char *src, char *dst) {
    char *tmp, *src2, *dst2, *tmptmp;


    tmp tmptmp strdup(s);


    suite:
    while(*tmp) {
        src2 = src;
        char *tmp2 = tmp;
        while(*tmp++ == *src2++) {
            if (!*src2) {
                dst2 = dst;
                while(*dst2) {
                   *s++ = *dst2++;
                }
                goto suite;
            }
        }
        while(tmp2 < tmp) *s++ = *tmp2++;
    }
    *s = 0;
    free(tmptmp);
}


int main() {
    char *chaine = "aaaaaaaaaala laaaaa";
    chaine = strdup(chaine);
    chaine = realloc(chaine,512);
    remplacer(chaine, "aaaaa", "e");
    printf("%s\n",chaine);
    return 0;
}
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
19 sept. 2007 à 14:50
acx01b :
char chaine[512]="aaaaaaaaalalaaaaaaaa";
c'est pas plus simple que
    char *chaine = "aaaaaaaaaala laaaaa";
    chaine = strdup(chaine);
    chaine = realloc(chaine,512);
??
acx01b Messages postés 280 Date d'inscription dimanche 7 septembre 2003 Statut Membre Dernière intervention 8 juillet 2014 6
19 sept. 2007 à 16:19
finalement ça marche mieux comme ça (sous entendu la version précédente ne fonctionnait pas)

#include <stdio.h>


void remplacer(char *s, char *src, char *dst) {
    char *tmp, *src2, *dst2, *tmptmp, *tmp2;


    tmp tmptmp strdup(s);
    tmp2 = tmp;


    suite:
    while(*tmp) {
        src2 = src;
        tmp2 = tmp;
        while(*tmp2++ == *src2++) {
            if (!*src2) {
                dst2 = dst;
                while(*dst2) {
                   *s++ = *dst2++;
                }
                tmp = tmp2;
                goto suite;
            }
        }
        *s++ = *tmp++;
    }
    *s = 0;
    free(tmptmp);
}


int main() {
    char *chaine = "aazaaaaza";
    chaine = strdup(chaine);
    chaine = realloc(chaine,512);
    remplacer(chaine, "aza", "123456");
    printf("%s\n",chaine);
    free(chaine);
    return 0;
}
snpier wolf Messages postés 216 Date d'inscription samedi 11 août 2007 Statut Membre Dernière intervention 30 mai 2011
19 sept. 2007 à 19:19
Salutation à tous,
merci pour toute ses codes, j'espère que sa vous a aidé, mais maleureusement cher moi sa ne marche pas, pour moi du moin.
merci quen même pour votre aide.
@++
snpier wolf Messages postés 216 Date d'inscription samedi 11 août 2007 Statut Membre Dernière intervention 30 mai 2011
19 sept. 2007 à 19:23
si sa marche enfait j'ai trouver, c'étais le :
<hr />
chaine = realloc(chaine,512);
<hr />
qui faisai foirer
merci encors
Rejoignez-nous