Soyez le premier à donner votre avis sur cette source.
Vue 12 676 fois - Téléchargée 233 fois
/*************************************************************/ /* 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; }
*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++
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.
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 < pbuff) {
if(*c !13) *d++ *c;
c++;
}
WriteFile(hfl, pbuff, d - pbuff, &dw, 0);
if(nAspires >= sizeBuff) goto NextPass;
BruNews, Admin CS, MVP Visual C++
Vous devez avoir le temps dans votre fac.
BruNews, Admin CS, MVP Visual C++
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.