Forums Rue-Montgallet.com
Rue-Montgallet.comRue-Hardware.comRue-Occasion.comRue-DVD.comRue-Jeuxvideo.comRue-AudioVideo.comRue-Telephone.comForums
S'inscrire | S'identifier |
| Recherche avancée | Aide
 
 

billylebegue Achat - Vente Informatique : pj40 Achat - Vente Divers : fougord, nemo9, 1 utilisateur anonyme et 63 utilisateurs inconnus

 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet :

Remplacer des caracteres dans un fichier texte

 
n°10483
Hansdadou
Profil : Jeune recrue
Posté le 18-10-2004 à 17:23:38  profilanswer
 

Bonjour,
 
Je recherche un "bout de code" qui permet d'ouvrir un fichier texte et de remplacer certains caractères par d'autres.
N'étant pas développeur, je me permets de poser la question sur le forum.
 
D'avance merci.

n°10485
P-Y
Profil : Vieux de la vieille
Posté le 18-10-2004 à 18:45:29  profilanswer
 

sous quel OS?

n°10494
Hansdadou
Profil : Jeune recrue
Posté le 19-10-2004 à 09:25:17  profilanswer
 

Bonjour,
 
Sous Windows 2000 ...

n°10511
podone
POD first ONE of best game
Profil : Habitué
Posté le 21-10-2004 à 23:13:57  profilanswer
 

Hansdadou a écrit :

Bonjour,
 
Je recherche un "bout de code" qui permet d'ouvrir un fichier texte et de remplacer certains caractères par d'autres.
N'étant pas développeur, je me permets de poser la question sur le forum.
 
D'avance merci.


Voici une solution possible :

Code :
  1. // CHGTXT.cpp : définit le point d'entrée pour l'application console.
  2. //
  3. #include "stdafx.h"
  4. #include <windows.h>
  5. // Taille du buffer tampon de fichier
  6. #define  FILEBUFFERSIZE                (1024)
  7. // Fonction de modification de fichier
  8. bool FileModify(char*   A_lpszFileName,         // IN
  9.                 char*   A_lpszStringToReplace,  // IN
  10.                 char*   A_lpszNewString);       // IN
  11. int _tmain(int argc, _TCHAR* argv[])
  12. {
  13.     FileModify("chgtxt.txt",
  14.               "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ~#{[|`@]}¤&é'(-è_çà)=^$ù*<,;:!1234567890°+£%µ>?./§",
  15.               "zyxwvutsrqponmlkjihgfedcba§/.?>µ%£+°0987654321!:;,<*ù$^=)àç_è-('é&¤}]@`|[{#~ZYXWVUTSRQPONMLKJIHGFEDCBA" );
  16. return 0;
  17. }
  18. bool FileModify(char*   A_lpszFileName,         // IN
  19.                 char*   A_lpszStringToReplace,  // IN
  20.                 char*   A_lpszNewString)        // IN
  21. {
  22. // Resultat de la fonction
  23. bool                    bResultat;
  24. // Handle du fichier texte
  25. HANDLE                  hFile;
  26. // Buffer tampon du fichier
  27. char*                   lpszFileBuffer;
  28. // Caractere trouve
  29. char                    szCharFound[2];
  30.      
  31. // Nombre de caracteres lus dans le fichier
  32. DWORD                   dwNbOfBytesRead;
  33. // Nombre de caracteres ecrits dans le fichier
  34. DWORD                   dwNbOfBytesWritten;
  35. // Offset de recherche
  36. DWORD                   dwOffset;
  37. // Offset de resultat de recherche
  38. DWORD                   dwFoundPosition;
  39.    // Initialiser le resultat
  40.    bResultat = false;
  41.    // SI chaines de tailles differentes
  42.    if (strlen(A_lpszStringToReplace) != strlen(A_lpszNewString))
  43.    {
  44.       // Aller a FunctionRet
  45.       goto FunctionRet;
  46.    }
  47.    // FIN SI
  48.    // Creer le buffer tampon
  49.    lpszFileBuffer = (char*) malloc(FILEBUFFERSIZE + 1);
  50.    // Ouvrir le fichier texte
  51.    hFile = CreateFile(A_lpszFileName,
  52.                       (GENERIC_READ | GENERIC_WRITE),
  53.                       0,
  54.                       NULL,
  55.                       OPEN_EXISTING,
  56.                       FILE_ATTRIBUTE_NORMAL,
  57.                       NULL);
  58.                          
  59.    // SI l'ouverture a echoue
  60.    if (hFile == INVALID_HANDLE_VALUE)
  61.    {
  62.       // Aller a FunctionEnd
  63.       goto FunctionEnd;
  64.    }
  65.    // FIN SI l'ouverture a echoue
  66.    // SI on ne peut pas se positionner en debut du fichier
  67.    if (SetFilePointer(hFile, 0L, NULL, FILE_BEGIN) == INVALID_SET_FILE_POINTER)
  68.    {
  69.       // Aller a CloseFile
  70.       goto CloseFile;
  71.    }
  72.    // FIN SI on ne peut pas se positionner en debut du fichier
  73.    // Initialiser le caractere trouve
  74.    szCharFound[1] = 0;
  75.      
  76.    // FAIRE
  77.    do
  78.    {
  79.       // SI la lecture d'une portion du fichier a echoue
  80.       if (!(ReadFile(hFile, lpszFileBuffer, FILEBUFFERSIZE, &dwNbOfBytesRead, NULL)))
  81.       {
  82.          // Aller a CloseFile
  83.          goto CloseFile;
  84.       }
  85.       // FIN SI la lecture d'une portion du fichier dictionnaire a echoue
  86.        
  87.       // Transformer le buffer lu en chaine
  88.       *(lpszFileBuffer + dwNbOfBytesRead) = 0;
  89.       // Initialiser l'offset
  90.       dwOffset = 0;
  91.       // TOUJOURS
  92.       while (TRUE)
  93.       {
  94.          // Rechercher si caractere a remplacer
  95.          dwFoundPosition = (DWORD)strcspn((lpszFileBuffer + dwOffset), A_lpszStringToReplace);
  96.        
  97.          // SI pas de caractere trouve
  98.          if (dwFoundPosition == strlen(lpszFileBuffer + dwOffset))
  99.          {
  100.             // Continuer au bloc suivant
  101.             break;
  102.          }
  103.          // FIN SI
  104.          // Position reelle
  105.          dwFoundPosition += dwOffset;
  106.          // Recuperer le caractere trouve
  107.          szCharFound[0] = *(lpszFileBuffer + dwFoundPosition);
  108.          // Recuperer l'offset du caractere dans la chaine a modifier
  109.          dwOffset = (DWORD)strcspn(A_lpszStringToReplace, szCharFound);
  110.          // Remplacer le caractere trouve
  111.          *(lpszFileBuffer + dwFoundPosition) = *(A_lpszNewString + dwOffset);
  112.          // Initialiser l'offset de recherche
  113.          dwOffset = dwFoundPosition + 1;
  114.       }
  115.       // FIN TANT QUE
  116.       // SI echec du repositionnement du pointeur de fichier
  117.       if (SetFilePointer(hFile, -(int)dwNbOfBytesRead, NULL, FILE_CURRENT) == INVALID_SET_FILE_POINTER)
  118.       {
  119.          // Aller a CloseFile
  120.          goto CloseFile;
  121.       }
  122.       // FIN SI on ne peut pas se repositionner
  123.       // SI echec de la reecriture du fichier
  124.       if (!(WriteFile(hFile, lpszFileBuffer, dwNbOfBytesRead, &dwNbOfBytesWritten, NULL)))
  125.       {
  126.          // Aller a CloseFile
  127.          goto CloseFile;
  128.       }
  129.       // FIN SI echec de la reecriture du fichier
  130.       // SI ecriture incomplete
  131.       if (dwNbOfBytesRead != dwNbOfBytesWritten)
  132.       {
  133.          // Aller a CloseFile
  134.          goto CloseFile;
  135.       }
  136.       // FIN SI ecriture incomplete
  137.    }
  138.    // TANT QUE le fichier n'est pas lu completement
  139.    while (dwNbOfBytesRead == FILEBUFFERSIZE);
  140.    // Indiquer reussite
  141.    bResultat = true;
  142. CloseFile:
  143.    // Fermer le fichier
  144.    CloseHandle(hFile);   
  145. FunctionEnd:
  146.    // Liberer la memoire tampon
  147.    free(lpszFileBuffer);
  148. FunctionRet:
  149.    // Retourner le resultat
  150.    return bResultat;
  151. } // fin FileModify()


Appelée 2x, la fonction restitue au fichier son format d'origine.
 
Attention !  
Cette solution n'est pas valide pour un fichier txt Unicode.


Message édité par podone le 22-10-2004 à 23:14:41
n°10532
Hansdadou
Profil : Jeune recrue
Posté le 25-10-2004 à 16:57:19  profilanswer
 

Bonjour et merci pour cet exemple.
Je vais essayer de ce pas.


Aller à :
Ajouter une réponse