Filereader

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 204 fois - Téléchargée 18 fois

Contenu du snippet

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 / Exemple :


//----------------------------------------------------------//
//    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?

A voir également

Ajouter un commentaire

Commentaires

Messages postés
33
Date d'inscription
mercredi 18 octobre 2000
Statut
Membre
Dernière intervention
4 janvier 2010

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
Messages postés
21
Date d'inscription
samedi 1 août 2009
Statut
Membre
Dernière intervention
20 mai 2011

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.
Messages postés
101
Date d'inscription
samedi 9 février 2002
Statut
Membre
Dernière intervention
5 mai 2009

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.
Messages postés
21
Date d'inscription
samedi 1 août 2009
Statut
Membre
Dernière intervention
20 mai 2011

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?
Messages postés
101
Date d'inscription
samedi 9 février 2002
Statut
Membre
Dernière intervention
5 mai 2009

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.
Afficher les 9 commentaires

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.