77 lines
1.4 KiB
C
77 lines
1.4 KiB
C
#include <stdio.h>
|
||
#include <stdlib.h>
|
||
|
||
typedef struct {
|
||
char valeurs[1000];
|
||
int debut;
|
||
int fin;
|
||
size_t taille;
|
||
} file;
|
||
|
||
void initialise_file(file* f) {
|
||
f->debut = 0;
|
||
f->fin = 0;
|
||
f->taille = 0;
|
||
}
|
||
|
||
int empty(file* f) {
|
||
return (f->taille == 0);
|
||
}
|
||
|
||
void enqueue(file* f, char c) {
|
||
f->valeurs[f->fin] = c;
|
||
f->fin++;
|
||
f->taille++;
|
||
}
|
||
|
||
char dequeue(file* f) {
|
||
if (empty(f)) {
|
||
printf("Erreur : La file est vide.\n");
|
||
return;
|
||
}
|
||
f->debut++;
|
||
f->taille--;
|
||
return f->valeurs[f->debut-1];
|
||
}
|
||
|
||
int main(int argc, char** argv) {
|
||
FILE* fichier = NULL;
|
||
file f;
|
||
char resultat;
|
||
initialise_file(&f);
|
||
if (argc != 2) {
|
||
printf("Il faut entrer un (unique) chemin de fichier.\n");
|
||
return EXIT_FAILURE;
|
||
}
|
||
fichier = fopen(argv[1], "r");
|
||
if (fichier == NULL) {
|
||
printf("Erreur d'ouverture.\n");
|
||
return EXIT_FAILURE;
|
||
}
|
||
fread(&resultat, 1, 1, fichier);
|
||
if (resultat == ';') { /* Point d'interrogation grec */
|
||
enqueue(&f, ';'); /* Point virgule */
|
||
}
|
||
else {
|
||
enqueue(&f, resultat);
|
||
}
|
||
while (feof(fichier) != 0) {
|
||
fread(&resultat, 1, 1, fichier);
|
||
if (resultat == ';') { /* Point d'interrogation grec */
|
||
enqueue(&f, ';'); /* Point virgule */
|
||
}
|
||
else {
|
||
enqueue(&f, resultat);
|
||
}
|
||
fclose(fichier);
|
||
|
||
fichier = fopen(fichier, "w+");
|
||
while (feof(fichier) != 0) {
|
||
resultat = dequeue(&f);
|
||
fwrite(&resultat, 1, 1, fichier);
|
||
}
|
||
fclose(fichier);
|
||
|
||
|
||
return EXIT_SUCCESS;
|
||
} |