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.
0
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
0
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++ 
0
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 ?
0

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?
0
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?
0
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
0
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;
}
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);
??
0
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;
}
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.
@++
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:23
si sa marche enfait j'ai trouver, c'étais le :
<hr />
chaine = realloc(chaine,512);
<hr />
qui faisai foirer
merci encors
0
Rejoignez-nous