| juju_le_barbare |
/*
salut,
il y a un bout de temps un gars sur forum.hardware.fr avait demandé le code en C++ pour remplacer
dans un fichier une chaîne de caractère par une autre.
Les paramètres passés sont le nom du fichier, la chaîne originale, puis la nouvelle chaîne.
Voici ce que je lui ai donné, codé vite fait juste pour montrer la piste à suivre.
Seulement comme tout le monde sait, je suis une grosse bite en programmation ;-))
Donc à un moment ça coince, à la ligne où le commentaire est plutôt explicite ^_^
Quelqu'un aurait-il l'obligeance de me dire pourquoi ça marche pas, et comment résoudre le problème ?
Il m'a pas recontacté depuis, c'est juste pour ma connaissance personnelle !
Merci d'avance,
*/
Code :
- //------------------------------------------------
- ---------------------------
- #pragma hdrstop
- #include <string.h>
- #include <stdio.h>
- #include <fcntl.h>
- #include <io.h>
- //---------------------------------------------------------------------------
- #pragma argsused
- void main(int argc, char *argv[])
- {
- if (argc == 4) //faut mettre les 3 paramètres !
- {
- int oldlng = strlen(argv[2]), newlng = strlen(argv[3]);
- char *tmp, *tmp2 = argv[2];
- int fich = open(argv[1], O_RDWR | O_TEXT); //ouvre le fichier (charge en mémoire)
- lseek(fich, 0L, SEEK_SET); //positionne le pointeur au début du fichier (SEEK_SET)
- while (!eof(fich))
- {
- read(fich, &tmp, oldlng); //on lit
- lseek(fich, -oldlng, SEEK_CUR); //on se repositionne en arrière
- if (!strcmp(tmp, tmp2)) //PQ CA MARCHE PAS ???
- {
- write(fich, argv[3], newlng); //pas super good car si la new chaine est plus longue,
- lseek(fich, newlng, SEEK_CUR); //on se repositionne à la fin //la suite est écrasée !
- }
- else
- lseek(fich, 1, SEEK_CUR); //on se repositionne 1 caractère plus loin
- }
- close(fich); //on ferme ;p
- }
- }
- //------------------------------------------------
- ---------------------------
|
//@++
//juju |