begin process at 2012 05 28 19:37:07
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Débutant(e)

 > 

[DEBUTANT C] Modifier fichier texet


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

[DEBUTANT C] Modifier fichier texet

mardi 22 avril 2008 à 10:56:12 | [DEBUTANT C] Modifier fichier texet

JeanMarcP

Bonjour

J'ai besoin, sur un vieux PC sous DOS, de modifier un fichier texte de la façon suivante :
Entre les 23ème et 24ème virgule, je dois ajouter le mot TEST, puis copier le fichier dans un répertoire K:\TEST

1-De quoi ai-je besoin pour que le programme tourne sous DOS ?
2-Comment faire ?

Je n'ai jamais fait de C, mais je connais VB par exemple

merci de votre patience...

Jean-Marc
mardi 22 avril 2008 à 11:49:40 | DEBUTANT C] Modifier fichier texte

JeanMarcP

Correction du titre
mardi 22 avril 2008 à 12:37:26 | Re : [DEBUTANT C] Modifier fichier texet

jfrancois

Bonjour,

Voici un essai commenté en C/C++ (sous Visual C++ 6.0) qui peut être utilisé directement ou servir de base. Le fichier à modifier est passé en paramètre et doit se trouver dans le répertoire courant et ne pas faire plus de 64Koctets (modifiable dans le programme). Le fichier modifié est créé dans le répertoire K:\TEST avec le même nom :

#include <stdio.h>
int main(int argc,char** argv)
{
   // --- Constantes
   static const int   iPositionInsertion = 24; // devant cette virgule
   static const char* szInsertion = "TEST";
   static const int   iLongueurInsertion = strlen(szInsertion);
   static const char* szRepertoire = "K:\\TEST\\";

   // --- Buffer de lecture du fichier
   static const int iTailleBuffer = 64 * 1024; // taille maxi
   char acBuffer[iTailleBuffer];


   // --- Présentation et contrôle du paramètre
   printf("\nMODIFICATION D'UN FICHIER\n");
   if (argc != 2)
   {
      printf("Utilisation: test nom_du_fichier\n");
      printf("Le fichier a modifier \"nom_du_fichier\" doit etre dans le repertoire courant\n");
      printf("Le fichier modifie \"nom_du_fichier\" est cree dans le repertoire \"%s\"\n",szRepertoire);
      return 0;
   }


   // --- Ouvrir/lire/fermer le fichier en entrée
   printf("Lecture du fichier %s\n",argv[1]);
   FILE* fp = fopen(argv[1],"rt");
   if (fp == NULL)
   {
      printf("*** Erreur a l'ouverture du fichier ***\n");
      return 0;
   }
   int iTailleFichier = fread(acBuffer,1,iTailleBuffer,fp);
   fclose(fp);
   printf("- %d caracteres lus dans %s\n",iTailleFichier,argv[1]);


   // --- Traiter le buffer
   int iCompteurVirgule = 0;
   for (int i=0 ; i<iTailleFichier ; ++i)
   {
      if (acBuffer[i] == ',')
      {
         if (++iCompteurVirgule == iPositionInsertion)
         {
            // --- Virgule atteinte :
            printf("Insertion de \"%s\" devant la virgule %d\n"
                  ,szInsertion,iPositionInsertion);

            // --- 1) Décaler de "iLongueurInsertion" caractères
            for (int j=iTailleFichier ; j>=i ; --j)
               acBuffer[j + iLongueurInsertion] = acBuffer[j];

            // --- 2) Insérer le texte
            strncpy(&acBuffer[i],szInsertion,iLongueurInsertion);

            // --- 3) Traitement du buffer terminé
            iTailleFichier += iLongueurInsertion;
            break;
         }
      }
   }
   if (iCompteurVirgule < iPositionInsertion)
   {
      printf("*** Fichier non modifie ***\n");
      return 0;
   }


   // --- Nom complet du fichier en sortie
   char szNomFichier[MAX_PATH];
   strcpy(szNomFichier,szRepertoire);
   strcat(szNomFichier,argv[1]);


   // --- Ouvrir/écrire/fermer le fichier en sortie
   printf("Ecriture du fichier %s\n",szNomFichier);
   fp = fopen(szNomFichier,"wt");
   if (fp == NULL)
   {
      printf("*** Erreur a l'ouverture du fichier ***\n");
      return 0;
   }
   fwrite(acBuffer,iTailleFichier,1,fp);
   fclose(fp);
   printf("- %d caracteres ecris dans %s\n",iTailleFichier,szNomFichier);
   return 0;
}

Ce qui donne :

C:\Temp\test test.txt

MODIFICATION D'UN FICHIER
Lecture du fichier test.txt
- 83 caracteres lus dans test.txt
Insertion de "TEST" devant la virgule 24
Ecriture du fichier K:\TEST\test.txt
- 87 caracteres ecris dans K:\TEST\test.txt

Fichier test.txt :
a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,avant 23,,apres 24,0,1,2,3,4,5,6,7,8,9

Fichier K:\TEST\test.txt :
a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,avant 23,TEST,apres 24,0,1,2,3,4,5,6,7,8,9


Jean-François

mardi 22 avril 2008 à 13:26:40 | Re : [DEBUTANT C] Modifier fichier texet

JeanMarcP

Merci beaucoup Jean-François

Par contre je ne possède par VC 6...  j'ai essayé de compiler avec BloodShield C++ (compilateur gratuit) mais j'ai plein d'erreur (notamment sur tout ce qui commence par str...), je suis en train de télécharger c++ 2008 express, mais cela sera-t-il compatible ?
De plus l'EXE généré passera-t-il sous DOS ?

Merci encore
Jean-Marc
mardi 22 avril 2008 à 13:44:30 | Re : [DEBUTANT C] Modifier fichier texet

jfrancois

Il n'y a aucune raison que ça ne passe pas sous C++ express 2008, c'est du code très basique qui tourne sans problème sous DOS bien sûr. Il manque les 2 includes string.h et stdlib.h et il faut changer MAX_PATH en _MAX_PATH ! (le source dans lequel j'ai saisi cet exemple à d'autres includes que j'avais oublié de passer en commentaire)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc,char** argv)
{
   ...
   char szNomFichier[_MAX_PATH];
   ...
}


Jean-François

mardi 22 avril 2008 à 13:58:51 | Re : [DEBUTANT C] Modifier fichier texet

jfrancois

Réponse acceptée !
Je viens de le tester sous Code::Blocks 8 (autre IDE C++ gratuit) et tout passe sans aucun problème.

Jean-François

mardi 22 avril 2008 à 14:23:50 | Re : [DEBUTANT C] Modifier fichier texet

JeanMarcP

Génial, effectivement cela fonctionne, un très grand merci Jean-François, pour ta patience et tes explications.
mardi 22 avril 2008 à 16:16:45 | [DEBUTANT C] Modifier fichiers textes

JeanMarcP

J'ai peur d'abuser...mais je me lance !

Si je veux que cela fonctionne en lançant TEST.EXE *.TXT au lieu de donner le nom du fichier en paramètre c'est possible ? ou bien directement le fait de lancer TEST.EXE traite tous les fichiers en extension TXT ?

Merci d'avance aux âmes charitables qui ouvrent sur ce forum...

Jean-Marc
mardi 22 avril 2008 à 16:21:33 | Re : [DEBUTANT C] Modifier fichier texet

jfrancois

C'est tout à fait possible en utilisant les fonctions FindFirstFile() et FindNextFile().

Jean-François

mardi 22 avril 2008 à 16:59:49 | Re : [DEBUTANT C] Modifier fichier texet

JeanMarcP

Je viens d'aller à la pêche aux infos sur la fonction FindFirstFile et j'ai trouvé le code suivant. L'ennui c'est que mes connaissances en C sont trop limite pour savoir où brancher cette fonction...

HANDLE hFind;
WIN32_FIND_DATA FindData;

// Début de la recherche
hFind=FindFirstFile ("*.TXT", &FindData);
if (hFind!=INVALID_HANDLE_VALUE)
{
// Si le fichier trouvé n'est pas un dossier mais bien un fichier
if (!(FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
{
*** Faire le traitement ***
}
// Fichiers suivants
while (FindNextFile (hFind, &FindData))
{
if (!(FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
{
*** là j'ai pas compris à quoi cela correspond ****
}
}
}
// Fin de la recherche
FindClose (hFind);

1 2

Cette discussion est classée dans : fichier, modifier, debutant, dos, texet


Répondre à ce message

Sujets en rapport avec ce message

modifier un fichier en hexadecimal [ par cybermarcel ] bonjours tout le monde !!! la forme ??alors voila je voudrai ouvrire un fichier et changer une valeur mais je voudrai l'ouvrire en hexadecimal et chan Un fichier .rul c'est quoi ???? [ par sounlight ] Voici mon problème : je dois modifier un logiciel programmé en c++. J'ai ses codes sources.Lors de l'installation du logiciel, le setup ne détecte pas lire fichier sonore DOS [ par istdasklar ] Ququn peut m indiquer un site ou je pourais apprendre ou avoir un code pour lire des fichier sonores wav, midi, voc, n importe koi du moment que c'est modifier un fichier texte sur ftp [ par kidpigeyre ] Je cherche à modifier un fichier texte présent sur mon ftp à partir de mon application.Cmt faire?Mci.kidpigeyre [Debutant C ] Modifier un bit dans une variable [ par GentooUser ] Salut,Voila j'ai une variable de type BYTE (unsigned char) donc 8bits, et j'aimerai pouvoir définir à 1 ou 0 chaque bits de la variable independement. Aidez un debutant s'il vous plait!! [ par skunsky ] Bojour à tous,voila, je suis debutant en programmation (enfin j ai quelques notions) et je voudrais créé avec c++ builder un petit programme me permet modifier un enregistrement [ par ludelu ] Bonjour, je souhaiterai savoir comment on peut modiffier un enregistrement dans un fichier et dans la même ocasion supprimer un fichier.Le fichier est modifier l'extension d'un fichier [ par oudkaramla ] bonjour j'ai un soucis:j'ai un fichier dont le nom est contenu dans une variable de type char, le probleme est que je veux changer son extensionl'exte Modifier nom console dos [ par goutbouyo ] Salut,Quand on exécute un programme console (DOS) en haut dans la barre de titre apparait le chemin de l'exécutable.J'aimerais savoir s'il était possi Modifier des octets dans un fichier ? [ par supergrey ] Salut, je voudrais savoir comment modifier des octets au milieu d'un fichier, jusqu'ici je recopier tout le fichier en changeant les octet voulu mais


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,312 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales