begin process at 2012 05 27 14:53:34
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichiers / Disque

 > CONVERSION DE FICHIER TEXTE DOS/WINDOWS EN FICHIER TEXTE UNIX

CONVERSION DE FICHIER TEXTE DOS/WINDOWS EN FICHIER TEXTE UNIX


 Information sur la source

Note :
6 / 10 - par 1 personne
6,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Fichiers / Disque Niveau :Initié Date de création :17/04/2004 Vu / téléchargé :10 465 / 181

Auteur : Abdellah81

Ecrire un message privé
Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note

 Description

Ce code va transformer des fichiers ecrit sous dos/windows en fichier texte unix .
C-a-d enlever les caractères suplémentaires non pris en charge par unix.

Source

  • /*************************************************************/
  • /* UDL, facultee des sciences, departement d'informatique */
  • /* El Antri Abdellah */
  • /* Email: el_emir_2002@yahoo.fr */
  • /* Compiler avec tc++ 3 sous dos et cc sous unix SunOs/linux */
  • /*************************************************************/
  • /*************************************************************/
  • /* Ce programme trnsforme un ficier texte ecrit sous dos ou */
  • /* windows en un fichier texte de format unix */
  • /* ***********************************************************/
  • #include<stdio.h>
  • #include<stdlib.h>
  • #include<errno.h>
  • #include<string.h>
  • #ifdef _cplusplus
  • #include<io.h>
  • #include<dos.h>
  • #endif
  • void erreur_ouverture_fichier(char *nom_fichier, int err)
  • {
  • printf("\n Erreur d'ouvrir le fichier nome: %s",nom_fichier);
  • switch(err)
  • {
  • case ENOENT:printf("\n Chemin ou fichier introuvable.\n");break;
  • case EMFILE:printf("\n Trop de fichiers ouverts.\n");break;
  • case EACCES:printf("\n Acces refuse.\n");
  • }
  • }
  • int main(int argc, char **argv)
  • {
  • char nom_fichier[100] ;
  • FILE *ptr_nom_fichier ;
  • FILE * ptr_fichier_temp;
  • char c ;
  • printf("\n*Ce prog transforme un fichier TXT sous dos/win au format unix.*\n");
  • if(argc == 1)
  • {
  • printf("\n Donner le nom de fichier:");
  • scanf("%s",nom_fichier);
  • }else if(argc == 2)
  • strcpy(nom_fichier,argv[1]);
  • else
  • {
  • printf("\n Trop de parametre.\n");
  • exit(1);
  • }
  • ptr_nom_fichier = fopen(nom_fichier,"r");
  • if(ptr_nom_fichier == NULL)
  • {
  • erreur_ouverture_fichier(nom_fichier,errno);
  • exit(1);
  • }
  • ptr_fichier_temp = fopen("temp","w+");
  • if(ptr_fichier_temp == NULL)
  • {
  • erreur_ouverture_fichier("fichier temporaire",errno);
  • }
  • while(!feof(ptr_nom_fichier))
  • {
  • c = getc(ptr_nom_fichier);
  • if( c != 13 && c != EOF)
  • fputc(c,ptr_fichier_temp);
  • }
  • fclose(ptr_nom_fichier);
  • if(fseek(ptr_fichier_temp, 0, SEEK_SET)<0)
  • {
  • printf("\nUne erreur est survenu.\n");
  • exit(1);
  • }
  • ptr_nom_fichier = fopen(nom_fichier,"w");
  • while(!feof(ptr_fichier_temp))
  • {
  • c = getc(ptr_fichier_temp);
  • if(c != EOF)
  • fputc(c,ptr_nom_fichier) ;
  • }
  • fclose(ptr_nom_fichier) ;
  • fclose(ptr_fichier_temp);
  • system("rm temp");
  • return 0;
  • }
/*************************************************************/
/* UDL, facultee des sciences, departement d'informatique                        */
/* El Antri Abdellah                                                                                */
/* Email: el_emir_2002@yahoo.fr                                                            */
/* Compiler avec tc++ 3 sous dos et cc sous unix SunOs/linux                    */
/*************************************************************/
/*************************************************************/
/* Ce programme trnsforme un ficier texte ecrit sous dos ou                      */
/* windows en un fichier texte de format unix                                           */
/* ***********************************************************/

#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<string.h>

#ifdef _cplusplus
#include<io.h>
#include<dos.h>
#endif


void erreur_ouverture_fichier(char *nom_fichier, int err)
{
printf("\n Erreur d'ouvrir le fichier nome: %s",nom_fichier);
switch(err)
     {
     case ENOENT:printf("\n Chemin ou fichier introuvable.\n");break;
     case EMFILE:printf("\n Trop de fichiers ouverts.\n");break;
     case EACCES:printf("\n Acces refuse.\n");
     }
}

int main(int argc, char **argv)
{
char nom_fichier[100]  ;
FILE *ptr_nom_fichier  ;
FILE * ptr_fichier_temp;
char c                 ;

printf("\n*Ce prog transforme un fichier TXT sous dos/win au format unix.*\n");
if(argc == 1)
  {
  printf("\n Donner le nom de fichier:");
  scanf("%s",nom_fichier);
  }else if(argc == 2)
	  strcpy(nom_fichier,argv[1]);
             else 
	     {
		     printf("\n Trop de parametre.\n");
		     exit(1);
	     }
ptr_nom_fichier = fopen(nom_fichier,"r");
if(ptr_nom_fichier == NULL)
  {
  erreur_ouverture_fichier(nom_fichier,errno);
  exit(1);
  }
ptr_fichier_temp = fopen("temp","w+");
if(ptr_fichier_temp == NULL)
   {
   erreur_ouverture_fichier("fichier temporaire",errno);
   }
while(!feof(ptr_nom_fichier))
     { 
     c = getc(ptr_nom_fichier);
     if( c != 13 && c != EOF)
        fputc(c,ptr_fichier_temp);
     }
fclose(ptr_nom_fichier);
if(fseek(ptr_fichier_temp, 0, SEEK_SET)<0)
   { 
	printf("\nUne erreur est survenu.\n");
	exit(1);
   }
ptr_nom_fichier = fopen(nom_fichier,"w");
while(!feof(ptr_fichier_temp))
     {
     c = getc(ptr_fichier_temp);
     if(c != EOF)
        fputc(c,ptr_nom_fichier)  ;
     }
fclose(ptr_nom_fichier) ;
fclose(ptr_fichier_temp);
system("rm temp");
return 0;
}

 Conclusion

Le programme va chercher les caractères retour a la ligne(code ascii 13).

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip TRANSFERT DE FICHIER VIA LE PROTOCOL TCP/IP
Source avec Zip CHEMIN CRITIQUE PAR LA METHODE PERT
Source avec Zip TRANSFERT DE FICHIER VIA SOCKET UDP
SIMPLEX PRIMAL
Source avec Zip PROBLÈME DES 8 REINES GÉNÉRALISÉ

 Sources de la même categorie

COMPTER LE NOMBRE DE PAGES D'UN FICHIER PDF par Renfield
Source avec Zip Source avec une capture GENERE BMP par lajouad
Source avec Zip Source avec une capture GETIONNAIRE D'UNE BIBLIOTHÉQUE EN C par benzarabel
FONCTION D'ÉDITION DE FICHIER BIT À BIT [C-MULTIPLATEFORME] par lynxtyle
Source avec Zip Source avec une capture UN GESTIONNAIRE DU FICHIER par benzarabel

Commentaires et avis

Commentaire de BruNews le 17/04/2004 20:29:38 administrateur CS

voila qui fera 2 acces fichiers par octet, un en lecture et un en ecriture.
Vous devez avoir le temps dans votre fac.

BruNews, Admin CS, MVP Visual C++

Commentaire de Kirua le 18/04/2004 02:00:57

BruNews, tu ferais comment pour limiter les accès? Tu peux pas non plus lire tout le fichier dans un tableau puis le récrire, c'est antiproductif. Et puis pour altérer des données, je vois que ça... tu lis, tu traîtes, tu écris.

Commentaire de BruNews le 18/04/2004 02:10:45 administrateur CS

il s'agit de saquer un octet donc simplissime.
Alloues un buffer 32 Ko par exemple (pbuff). On boucle tant qu'on aspire.
A chaque tour:
BYTE *c, *d, *pout;
NextPass:
... lecture fichier
c = d = pbuff;
pout = pbuff + nAspires;
while(c &lt; pbuff) {
if(*c != 13) *d++ = *c;
c++;
}
WriteFile(hfl, pbuff, d - pbuff, &dw, 0);
if(nAspires &gt;= sizeBuff) goto NextPass;

BruNews, Admin CS, MVP Visual C++

Commentaire de Kirua le 18/04/2004 02:19:11

tu peux me rappeler si *d++ correspond à (*d)++ ou à *(d++) ? merci ^^
accessoirement, j'aurais utilisé une while plutôt qu'un système de goto, est-ce que le goto est, d'une manière oe d'une autre, plus rapide, ou est-ce que c'est une de tes habitudes de codage?

finalement, la seule chose qui change c'est que tu traîtes un plus gros volume d'un coup, tu fais des économies d'échelle ^^ c vrai que c probablement plus rapide.

Commentaire de BruNews le 18/04/2004 02:25:49 administrateur CS

'probablement' tu peux le remplacer par enormement, dans un prog comme celui ci 98 % du temps se passe en acces disques donc reduction est (32 * 1024 FOIS), c'est pas rien.

*d++ = *c se decompose en:
*d = *c;
d++;
Le goto est une vieille habitude qui m'evite des indentations parfois qui n'en finissent plus avec des while, for... Dans tous les cas le compilo ecrira des goto (JMP en ASM) donc resultat est idem.

BruNews, Admin CS, MVP Visual C++

 Ajouter un commentaire




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,562 sec (4)

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