begin process at 2012 05 27 16:20:24
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichiers / Disque

 > FILEREADER

FILEREADER


 Information sur la source

 Description

Ceci est un code que j'ai réalisé dans le cadre de mon apprentissage du langage C. Il lit un fichier text (utiliser un format du type Notepad pour les utilisateurs Windows, sur Mac pas de problème avec Appleworks, je n'ai pas testé Linux), et tiens a jour la fréquence d'utilisation des lettres et chiffres.
Il devrait être très portable, car codé uniquement en ANSI-C99.
Feedback constructif bienvenu! ;)

Source

  • //----------------------------------------------------------//
  • // TataYoyo by Francois Gauthier, public domain, 2009. //
  • //----------------------------------------------------------//
  • // //
  • // TataYoyo return percentage of each alphanumeric //
  • // occurences used in any given text file. //
  • //==========================================================//
  • #include <stdio.h>
  • #include <stdlib.h>
  • #include <ctype.h>
  • int main (int argc, const char * argv[])
  • {
  • int c;
  • int i, nbCar=0, compt[36]={0};
  • char n_source[100];
  • printf("File to analyse? (eventually including directory):\t");
  • scanf("%100s", &n_source);
  • FILE* stream=fopen(n_source, "r");
  • if(stream==NULL)
  • {
  • puts("\nFILE NOT FOUND");
  • exit(1);
  • }
  • while (c=fgetc(stream), c!=EOF)
  • //------------------------------------------------------------------------//
  • if (isdigit(c))
  • {
  • compt[c - '0' +26]++; //
  • nbCar++; //
  • } //
  • // Alphanumeric sorting
  • //
  • else if (isalpha(c)) //
  • { //
  • compt[towlower(c) -'a']++; //
  • nbCar++; //
  • }
  • //-----------------------------------------------------------------------//
  • for(i=0;i<36;i++)
  • { // Statistic creation
  • c=(i<26)? 'a'+i: '0'+i-26;
  • printf(" %c %2.5f%% ||",c, (compt[i]/((float)nbCar))*100);
  • if (i%4==3) putchar('\n');
  • }
  • fclose(stream);
  • return 0;
  • }
//----------------------------------------------------------//
//    TataYoyo by Francois Gauthier, public domain, 2009.  //
//----------------------------------------------------------//
//                                                          //
//    TataYoyo return percentage of each alphanumeric       //
//    occurences used in any given text file.               //
//==========================================================//



#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>



int main (int argc, const char * argv[])                     
{
	int c;
	int i, nbCar=0, compt[36]={0};
	char n_source[100];               
	
	printf("File to analyse? (eventually including directory):\t");
	scanf("%100s", &n_source);
	FILE* stream=fopen(n_source, "r");
	if(stream==NULL)
	 {
                       puts("\nFILE NOT FOUND");
                       exit(1);
	 }
		
	while (c=fgetc(stream), c!=EOF) 
		
		
//------------------------------------------------------------------------//	
		
		
	if (isdigit(c))
			
			
		{
		    compt[c - '0'  +26]++;          //
		    nbCar++;                        //
		}                                   //
			                            // Alphanumeric sorting
			                            //
		else if (isalpha(c))                //
		{                                   //
			compt[towlower(c) -'a']++;  //
			nbCar++;                    //
		}
			
//-----------------------------------------------------------------------//			

	for(i=0;i<36;i++)
	
	{             // Statistic creation 

		c=(i<26)? 'a'+i: '0'+i-26;
		printf(" %c %2.5f%% ||",c, (compt[i]/((float)nbCar))*100);      
		if (i%4==3) putchar('\n');                              
	}

			
			
	 fclose(stream);
	
	
	
    return 0;
}

 Conclusion

Vous aimez?


 Historique

20 octobre 2009 11:41:03 :
la forme exit(printf("FILE NOT FOUND")); bien que fonctionnelle, n'est pas des plus orthodoxe. La modification du code fait renvoyé a exit() une valeur traditionnelle.

 Sources du même auteur

Source avec Zip GENERIC INPUTBOX FOR WINDOWS (WIN32 AND C)
Source avec Zip WINDOWCAPTURE
Source avec Zip Source avec une capture HIGHWAY SIMULATOR
Source avec Zip TICTACTOE EN C
Source avec Zip CRYPT-O-MATIC "DARKCHOCOLATE"

 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

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture CONVHTML : UN UTILITAIRE DE CONVERSION POUR FICHIERS HTML par pgl10
Source avec Zip WINDOWCAPTURE par FrancoisGauthier
Source avec Zip WINTIMER V.2 [DEV-C++ 4] par faves

Commentaires et avis

Commentaire de tibur le 20/10/2009 00:25:26

C'est quoi, l'intérêt du exit(printf("\nFILE NOT FOUND\n"));  ?

Commentaire de FrancoisGauthier le 20/10/2009 00:34:42

Il teste le pointeur sur fichier. S'il renvoi NULL, le fichier n'est pas là. Peut être aurais-je du faire une boucle pour permettre à l'utilisateur de ressaisir le chemin de fichier plutôt que de faire appel à EXIT, c'est vrai.

Merci!

Commentaire de tibur le 20/10/2009 09:07:14

Le truc c'est que je vois pas pourquoi tu fais un exit de la valeur de retour de printf. Voila ce que renvois printf:
Return Value
On success, the total number of characters written is returned.
On failure, a negative number is returned.

L'intérêt que ton main renvois une valeur, c'est de pouvoir identifier l'erreur. Alors pourquoi renvoyer ça ?

Commentaire de FrancoisGauthier le 20/10/2009 10:49:51

La valeur de retour de printf() n'est pas utilisée. Dans le cas de ce code, elle ne renverrait jamais de code erreur (sauf peut être en cas de panne du périphérique concerné: l'ecran. Comme ça ne m'est jamais arrivé, je ne suis pas sur, mais il semble que cela puisse être le cas.)
J'aurai pu utiliser puts() plutot que printf(), puisque il n'y a aucun code format en jeu. L'idée était simplement de fournir a l'utilisateur un message d'erreur simple: "Le fichier n'est pas présent a cet endroit" si le pointeur sur fichier renvoie NULL.

  exit(puts("FILE NOT FOUND\n"));  

  // Affiche le message d'erreur à l'écran et termine le programme.


Commentaire de tibur le 20/10/2009 10:55:03

Dans ce cas, écris:
printf("FILE NOT FOUND\n");
exit(1);

Un programme doit renvoyer une valeur lorsqu'il quitte. Par convention, il renvoie 0 quand tout c'est bien passé et autre chose sinon.

Pour info, printf renvoie:
On success, the total number of characters written is returned.
On failure, a negative number is returned.

Commentaire de FrancoisGauthier le 20/10/2009 11:07:20

Je ne suis pas sur de bien comprendre...
Selon mon code, la fonction exit() termine le programme en cas d'erreur de lecture de fichier. exit() renvois bien un code en retour, et ce n'est pas 0.
Il est vrai que le code retour de exit() n'est pas exploité plus avant, l'info principale étant transmise à l'utilisateur.

Sur mon implémentation, L28: exit(....) fournit la valeur 10 en retour, qui est comprise par l'environnement comme une fin anormale de programme.

Ai-je manqué quelque chose?

Commentaire de tibur le 20/10/2009 11:17:15

La fonction exit prend en paramètre un entier qui est renvoyé à l'OS afin de déterminer pourquoi le programme a quitté. Si tu dois quitter le programme alors qu'aucune erreur n'est survenue, il est de bon gout de faire exit(0).
Dans le cas où ton programme dois quitter suite à une erreur (par exemple si un fichier n'est pas trouvé), la convention veut que tu fasses un exit(n) où n indique ton erreur.
Cela permet à la personne (au script) qui a lancé ton programme de détecter si tout s'est bien passé, ou s'il y a eu une erreur.
Tout ça pour dire que c'est plutôt étrange que ton programme fasse un exit avec comme paramètre le code de retour de la fonction printf.

Commentaire de FrancoisGauthier le 20/10/2009 11:30:33

Ok j'ai compris.

Pour la petite histoire, j'ai tenté l'aventure du exit(printf("")); pour voir si ça "passait" à la compilation.
Je n'ai pas trop pensé aux implications au delà de ça...

Merci Tibur pour tes explications.

Commentaire de mogador le 19/12/2009 19:31:43

Bonjour,

je souhaiterais convertir n'importe quel type de fichier (txt, jpg, avi, exe ...) en fichier binaire ou plutot en fichier texte contenant un suite de 0 et 1. et la meme chose faire le contraire.



#include <stdio.h>

int main(int argc, char **argv) {
/*
FILE *fp;
fp=fopen("test.c", "wb");
char x[10]="ABCDEFGHIJ";
fwrite(x, sizeof(x[0]), sizeof(x)/sizeof(x[0]), fp);
*/

FILE *fp;
fp=fopen("test.c", "rb");
char x[10];//="ABCDEFGHIJ";
fread(x, sizeof(char), 10, fp);

printf("%d================",sizeof(x));
printf("\n");
for(int i=0;i<sizeof(x);i++)
{

printf("%x==========",x[i]);
//printf("\n");
for(int j=7;j>=0;j--)
{
//printf("(%d)",j);
printf("%d",(x[i]>>j)&(255>>7));
}
printf("\n");
}




}





Merci pour votre aide.

sed

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

utilitaire de mise en forme de code source [ par Battousai ] Bonjour a tous le monde , Ma question ne conserne pas spécialement le langage de programmation c en question. Je veut savoir s'il éxiste un utilitaire publier une application [ par boumarsel ] J'ai developpé un utilitaire qui ressemble (avec des fonctionnalités de plus) à l'utilitaire "process viewer" de "norton system works 2004". d'abord j


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 : 1,014 sec (4)

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