Skip to content
Extraits de code Groupes Projets
Valider 3962b4eb rédigé par Jonathan Twite's avatar Jonathan Twite
Parcourir les fichiers

Fonctions relatives a la lecture dans les fichiers ligne par ligne. Lisez bien les commentaires.

parent 21b6682e
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
//
// Created by jtwite on 30.03.20.
//
#ifndef PROJET_Q4_GROUPE_O4_FILEFEATURES_H
#define PROJET_Q4_GROUPE_O4_FILEFEATURES_H
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
/**
* A SAVOIR pour la conversion de char en int:
* Si 'x' ∈ ['0', '1', '2', ..., '9'] alors
* alors (int) x = x - '0'
*/
// Mes fonctions:
long readLine(int file, char *buff);
long parseLong(char *buff, int index);
long ipow(int base, int exp);
// bizarrement, quand j'appelle la fonction pow de la librairie math.h,
// on me retourne des erreurs donc j'ai refait une implementation
/**
* @param #file le fichier a read qu'on a prealablement charge (on ne charge pas le fichier ici)
* @param #buff un char[x>=20] qui collecte les digits lus byte par byte
* @return la ligne lue dans file sous forme numérique
*/
long readline(int file, char buff[]) {
if(file == 0) {
puts("End of file.");
return 0;
}
if (file <= 0) {
printf("Trying to read into %d directory.", file);
close(file);
return -1;
} else if (buff == NULL) { // char doit être
puts("Trying to store values into NULL buffer.");
return -2;
}
int byteReader = read(file, &(*buff), 1); // In order to call the read() iteratively, we have to call it once before
if (buff[0] > '9') {
puts("Illegal argument.");
return -3;
} else if(buff[0] < '0') {
puts("End of file");
return 0;
}
int i = 1;
while (byteReader = read(file, &buff[i], 1) > 0) { // while datas are still remaining
if (buff[i] == '\n') { // if this is the end of line
return parseLong(buff, i); // return the long value
} else if (buff[i] > '9' || buff[i] < '0') { // if the readed value isn't a digit
printf("Illegal argument (%d)..", i); // stop the program
return -3;
} else // otherwise keep iterating
i++;
}
return byteReader;
}
/**
* @param #buff la ligne lue dans le fichier
* @param index qui signifie les n premiers digits à lire
* @return la ligne lue dans file sous forme numérique
*/
long parseLong(char *buff, int index) {
if (buff == NULL)
return -1;
long k = 0;
for (int i = index - 1 ; i >= 0; i--) {
k += (buff[i] - '0') * ipow(10, index - (i + 1)) ;
}
return k;
}
long ipow(int base, int exp) {
long result = 1;
for (;;) {
if (exp & 1)
result *= base;
exp >>= 1;
if (!exp)
break;
base *= base;
}
return result;
}
#endif //PROJET_Q4_GROUPE_O4_FILEFEATURES_H
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter