Created
November 17, 2019 22:22
-
-
Save cacharle/337d3e40e0cfc39ee4ef47ec663f2738 to your computer and use it in GitHub Desktop.
cheatsheet to read files in c
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
nom=didier age=43,xp=65,hp=100 | |
nom=dupond age=12,xp=34,hp=110 | |
nom=jean age=1,xp=2,hp=110 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
bonjour | |
je | |
suis | |
un | |
fichier | |
avec | |
des | |
lignes et des mots |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
bonjour je suis un fichier |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment