Skip to content

Instantly share code, notes, and snippets.

@cacharle
Created November 17, 2019 22:22
Show Gist options
  • Save cacharle/337d3e40e0cfc39ee4ef47ec663f2738 to your computer and use it in GitHub Desktop.
Save cacharle/337d3e40e0cfc39ee4ef47ec663f2738 to your computer and use it in GitHub Desktop.
cheatsheet to read files in c
nom=didier age=43,xp=65,hp=100
nom=dupond age=12,xp=34,hp=110
nom=jean age=1,xp=2,hp=110
bonjour
je
suis
un
fichier
avec
des
lignes et des mots
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE *file;
/* fopen([nom du fichier], [mode d'ouverture])
*
* les fichiers ouvert on un 'curseur' qui leur est associe (comme le curseur dans un editeur de text)
* pour la lecture, on va lire a partir de ce curseur, pareil pour l'ecriture.
*
* les mode d'ouvertures sont:
* - "r": lire le fichier (extraire des informations)
* - "w": ecrire dans le fichier (si il y avait du contenu dans celui-ci, ecrase ce contenu)
* - "a": ecrire en ajoutant a la fin (place le curseur a la fin du fichier et ecrit a partir de la)
* - "r+": lire et ecrire
* - "w+": lire et ecrire, le contenu du fichier est effacer avant.
* - "a+": lire et ecrire en mode ajout (le curseur est a la fin).
*
* fopen return un pointeur (FILE*) (souvant appelle stream) sur le fichier ouvert
* ou NULL si il y a eut erreur (il faut quitter le programme s'il y a une erreur)
*/
file = fopen("test.txt", "r");
if (file == NULL)
exit(1);
char character;
printf("fgetc, methode de barbare\n");
while (1)
{
/* fgetc([stream])
* retourne le caractere sous le curseur et avance le cuseur sur le prochain character.
*/
character = fgetc(file);
/* feof([stream])
*
* test si le curseur est a la fin du fichier.
* renvoit 1 si c'est le cas, 0 dans le cas contraire.
*/
if (feof(file)) // si on arrive a la fin du fichier quitte la boucle infinie
break;
printf("%c", character);
}
/* rewind([stream])
* replace le curseur au debut du fichier.
*/
rewind(file);
/*
* la fonction fgetc retourne EOF (qui est une macro definie dans stdio.h (avec #define)
* la boucle du dessus peut donc etre simplifie.
* (on assigne character avec le retour de fgetc et en meme temps on verifie qu'il est != EOF.
*/
printf("\nfgetc, methode clean\n");
while ((character = fgetc(file)) != EOF)
printf("%c", character);
/* fseek([stream], [decalage du curseur par rapport a l'origine], [origine])
*
* positionne le curseur a un endroit dans le fichier
*
* l'origine peut etre:
* - SEEK_SET: le debut du fichier.
* - SEEK_END: la fin du fichier.
* - SEEK_CUR: la position actuel du curseur.
*
* on peut decaler le curseur par rapport a la position d'origine.
* fseek(file, 10, SEEK_SET); positionne le curseur sur le 10eme charactere du fichier
* fseek(file, -5, SEEK_CUR); positionne le curseur 5 charactere avant sa position actuel.
* fseek(file, -7, SEEK_END); positionne le curseur 7 charactere avant la fin du fichier.
*/
fseek(file, 0, SEEK_SET);
printf("\n1 sur 2\n");
while ((character = fgetc(file)) != EOF)
{
fseek(file, 1, SEEK_CUR);
printf("%c", character);
}
/* rewind(file); */
FILE *file_lines = fopen("lines.txt", "r");
if (file_lines == NULL)
exit(1);
char line[128];
printf("\n\nligne par ligne\n");
/* fgets([chaine de char], [taille max que peut stocker cette chaine], [stream])
*
* s'arrete de lire si elle croise un \n ou si le nombre de charactere preciser en 2eme argument est depace
* return NULL si il a atteint la fin du fichier
*/
while ((fgets(line, sizeof(line), file_lines)) != NULL)
printf("%s", line);
FILE *file_formated = fopen("formated.txt", "r");
if (file_formated == NULL)
exit(1);
char nom[128];
int age, xp, hp;
printf("\nextraction de donnee avec fscanf\n");
/* fscanf([stream], [format], [valeur ou stocker ce qui corespond au format])
*
* essaye de trouver le format demander a la position du curseur.
* %s ne s'arrete que si il croise un espace
*
* return EOF a la fin du fichier
*/
while (fscanf(file_formated, "nom=%s age=%d,xp=%d,hp=%d\n", nom, &age, &xp, &hp) != EOF)
printf("%s a %d ans, xp est %d, hp est %d\n", nom, age, xp, hp);
/* quand on a plus besoin d'un fichier il faut le fermer */
fclose(file);
fclose(file_lines);
fclose(file_formated);
return 0;
}
bonjour je suis un fichier
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment