/*****************************************\
|* Code C pour lire un fichier CSV.      *|
|*                                       *|
|* Auteur : Frederic Henry.              *|
|* Note : On peut surement faire mieux ! *|
\*****************************************/
/*g++ -Wall -Wextra -c csvfc.c && g++ -Wall -Wextra csvfc.o -o csvfc && ./csvfc;*/
/* Bibliotheques standards de C 90. */
/* Entree/sortie & fichiers. */
#include <stdio.h>
/* Caracteres. */
#include <string.h>
/* Controles de procedures. */
#include <stdlib.h>
/* Lignes. */
#define LINES 8
/* Colonnes. */
#define ROWS 6
/* Fonction secondaire. */
/* Un texte d'aide pour connaƮtre les commandes. */
/* Une seule commande ici : '-h' pour l'aide. X-) */
void helper(void)/* Que du texte... :-| */
{
  printf("/*********************************************\\\n");
  printf("|* Section d'aide pour le programme 'csvfc'. *|\n");
  printf("|*                                           *|\n");
  printf("|* csvfc [-h|--help]                         *|\n");
  printf("|*                                           *|\n");
  printf("\\*********************************************/\n");
  printf("Pour manipuler ce programme, il suffit d'avoir");
  printf(" le fichier 'csvin.csv' dans le meme repertoire.\n\n");
  printf(" Contenu de 'csvin.csv' :\n");
  printf("\"X\",\"Y\",\"Z\",\"U\",\"V\",\"P\"\n");
  printf("1,1,1,1,1,1\n");
  printf("2,2,2,2,2,2\n");
  printf("3,3,3,3,3,3\n");
  printf("4,4,4,4,4,4\n");
  printf("5,5,5,5,5,5\n");
  printf("6,6,6,6,6,6\n");
  printf("7,7,7,7,7,7\n");
  printf("8,8,8,8,8,8\n\n");
  printf("Apres ca, on execute 'csvf'.\n");
}
/* Fonction principale. */
int main(int argc, char** argv)
{
  /* Avant de commencer, a-t-on ajoute une option ? */
  if (argc == 2)/* Si une option... */
  {
    /* En cas d'option '-h' ou '--help'... */
    if (strcmp(argv[1],"--help")==0 || strcmp(argv[1],"-h")==0)
    {
      /* Page d'aide invoquee. */
      helper();
      /* Fin du programme avec succes. */
      exit(EXIT_SUCCESS);
    }
  }
  /* Texte memorise. */
  char text[LINES+1][5*ROWS-1];
  /* Indices ligne/colonne. */
  char i,j;
  /* Matrice d'entiers. */
  int matrix[LINES][ROWS];
  /* Pour s'assurer la fin de chaque ligne.
   * Une ligne = une sous-chaine.
   */
  for (i=1; i<ROWS; i=i+1)
  {
    text[i][5*ROWS-1-1]='\0';
  }
  /* Pour la deco. car j'aime ca. :-D */
  printf("/*****************************************\\\n");
  printf("|* Code C++ pour lire un fichier CSV.    *|\n");
  printf("|*                                       *|\n");
  printf("|* Auteur : Frederic Henry.              *|\n");
  printf("|* Note : On peut surement faire mieux ! *|\n");
  printf("\\*****************************************/\n\n");
  printf("Lecture de \"./csvin.csv\"...\n");
  /* Lecture de fichier texte avec "FILE*". */
  FILE* entree;
  entree = fopen("./csvin.csv","r");
  printf("Table CSV (en-tete) :\n");
  /* Ligne 0 lue. */
  fscanf(entree,"%s",text[0]);
  printf("%s\n",text[0]);
  /* Les autres lignes. */
  printf("Table CSV (corps) :\n");
  for (i=1; i<LINES+1; i=i+1)
  {
    fscanf(entree,"%s",text[i]);
    printf("%s\n",text[i]);
  }
  /* Lecture integrale. */
  printf("Table CSV (tout) :\n");
  for (i=0; i<LINES+1; i=i+1)
  {
    printf("%s\n",text[i]);
  }
  printf("\n");
  /* Fermeture du fichier. */
  fclose(entree);
  /* Affichage du tableau de caracteres. */
  printf("Version tableau de caracteres :\n");
  /* En-tete. */
  for (j=0; j<ROWS; j=j+1)
  {
    printf("%c ",text[0][4*j+1]);
  }
  /* Corps. */
  printf("\n");
  for (i=1; i<LINES+1; i=i+1)
  {
    for (j=0; j<ROWS; j=j+1)
    {
      printf("%c ",text[i][2*j]);
    }
    printf("\n");
  }
  printf("\n");
  /* Pareil, facon nombres entiers. */
  printf("Version tableau d'entiers :\n");
  /* Conversion du texte a la matrice entiere. */
  for (i=0; i<LINES; i=i+1)
  {
    for (j=0; j<ROWS; j=j+1)
    {
      matrix[i][j]=(int)text[i+1][2*j]-48;
    }
  }
  /* Affichage de la matrice. */
  for (i=0; i<LINES; i=i+1)
  {
    for (j=0; j<ROWS; j=j+1)
    {
      printf("%d ",matrix[i][j]);
    }
    printf("\n");
  }
  printf("\n");
  /* Ce coup-ci, ecriture de tableau dans un fichier. */
  printf("Ecriture d'un tableau CSV \"./csvout.csv\"...\n");
  FILE* sortie;
  sortie = fopen("csvout.csv","w");
  /* Dabord l'en-tete. */
  fprintf(sortie,"\"X\",\"Y\",\"Z\",\"U\",\"V\",\"P\"\n");
  /* En suite le corps. */
  for (i=0; i<LINES; i=i+1)
  {
    for (j=0; j<ROWS-1; j=j+1)
    {
      fprintf(sortie,"%d,",matrix[i][j]);
    }
    fprintf(sortie,"%d\n",matrix[i][ROWS-1]);
  }
  /* Fichier ferme. */
  fclose(sortie);
  printf("\n");
  /* Fini. */
  printf("Fin\n");
  /* Pour dire que tout a bien marche. */
  return EXIT_SUCCESS;
}