Convertion d'un fichier GS vers un fichier PC


// conversion fichier GS en PC





#include "FCT_BASE.H"





void compacte (char *chaine)

// 11140

// a$ -> chaine

{

char tampon[LONG_ENR+1];



  strncpy (tampon, chaine, 4);         // numero d'enregistrement

  strncpy (tampon+4, chaine+5, 5);      // date op

  strncpy (tampon+9, chaine+11, 8);      // type op

  strncpy (tampon+17, chaine+20, 25);    // objet

  strncpy (tampon+42, chaine+46, 5);     // credit francs

  strncpy (tampon+47, chaine+52, 2);    // credit centimes

  strncpy (tampon+49, chaine+55, 6);    // debit francs

  strncpy (tampon+55, chaine+62, 2);    // centimes

  strncpy (tampon+57, chaine+65, 9);     // code compta

  if ( strlen (chaine) == LONG_VISU ) {

    strncpy(tampon+66, chaine+75, 5);

    tampon[71] = 0;

  }

  else

    tampon [66] = 0;

  strcpy (chaine, tampon);

}



void decompacte (char *chaine)

// 11120

// a$ ->chaine

{

char tampon[LONG_VISU+1];



  strncpy (tampon, chaine, 4);              // numero d'enregistrement

  tampon [4] = ' ';

  strncpy (tampon+5, chaine+4, 5);         // date op

  tampon [10] = ' ';

  strncpy (tampon+11, chaine+9, 8);         // type op

  tampon [19] = ' ';

  strncpy (tampon+20, chaine+17, 25);      // objet

  tampon [45] = ' ';

  strncpy (tampon+46, chaine+42, 5);       // credit francs

  if (chaine[42+4] != ' ')                 // Si pas de zero pas de point

    tampon [51] = '.';

  else

    tampon [51] = ' ';

  strncpy (tampon+52, chaine+47, 2);      // credit centimes

  tampon [54] = ' ';

  strncpy (tampon+55, chaine+49, 6);       // debit francs

  if (chaine[49+5] != ' ')            // Si pas de zero pas de point

    tampon [61] = '.';

  else

    tampon [61] = ' ';

  strncpy (tampon+62, chaine+55, 2);      // debit centimes

  tampon [64] = ' ';

  strncpy (tampon+65, chaine+57, 9);      // code compta

  if ( strlen (chaine) == LONG_ENR ) {

    tampon [74] = ' ';

    strncpy (tampon+75, chaine+66, 5);    // date marquage

    tampon [80] = 0;

  }

  else

    tampon [74] = 0;

  strcpy (chaine, tampon);

}







void Lecture_ligne_old (char* nom, int numero, char* ligne)

// 10300 -> 10310

// A$ = ligne

// FI$ = nom

// I= numero

{

FILE *fichier;



  fichier = fopen (nom, "rb");

  if (fichier != NULL) {

    if (numero == 0) {

      fseek (fichier, 0, SEEK_SET);

      fgets (ligne, LONG_ENR0+1, fichier);

    }

    else {

      fseek (fichier, ((long) numero - 1) * (LONG_ENR + 1)

                + LONG_ENR0 + 1, SEEK_SET);

      fgets (ligne, LONG_ENR+1, fichier);

      decompacte (ligne);

    }

    fclose (fichier);

  }

}





main ()

{

char ligne[LONG_VISU];

char nom[50];

char nom2[50];

int i;

ctxt Contexte;

int Mois, Mois_Prec=0, Jour, Annee;

char banque[13], reel[13], banque_init[13], reel_init[13];

int cr;

char debit[10], credit[9], Type[9];

Fiche fiche;





  printf ("Entrez le nom du fichier init ");

  scanf ("%s",nom);

  printf ("Année de départ et de création du compte ");

  scanf ("%i", &Annee);

  printf ("Entrez le nom du fichier resultat ");

  scanf ("%s",nom2);

  Lecture_ligne_old (nom, 0, ligne);

  // interprete l'enregistrement 0

  cr = sscanf (ligne, "%12c%2d/%2d%4d%11s%11s%11s%11s",

          Contexte.numero_compte,

          &Jour, &Mois,

          &Contexte.suivant,

          banque, reel, banque_init, reel_init);

  if (cr != 8) {

    printf ("Erreur Scanf ligne 0\n");

  }

  Contexte.date_creation = TDate (Mois, Jour, Annee);

  Contexte.rang_max = 1;

  Contexte.numero_compte[12] = 0;

  cr = strlen (banque);

  banque[cr+1] = 0;

  banque[cr] = banque[cr-1];

  banque[cr-1] = banque[cr-2];

  banque[cr-2] = '.';

  Contexte.solde_banque = TMontant(banque, 12);

  cr = strlen (reel);

  reel[cr+1] = 0;

  reel[cr] = reel[cr-1];

  reel[cr-1] = reel[cr-2];

  reel[cr-2] = '.';

  Contexte.solde_reel = TMontant (reel, 12);

  cr = strlen (banque_init);

  banque_init[cr+1] = 0;

  banque_init[cr] = banque_init[cr-1];

  banque_init[cr-1] = banque_init[cr-2];

  banque_init[cr-2] = '.';

  Contexte.solde_banque_init = TMontant (banque_init, 12);

  cr = strlen (reel_init);

  reel_init[cr+1] = 0;

  reel_init[cr] = reel_init[cr-1];

  reel_init[cr-1] = reel_init[cr-2];

  reel_init[cr-2] = '.';

  Contexte.solde_reel_init = TMontant (reel_init, 12);

  Contexte.num_chq=0;

  // Ecriture du contexte

  Ecriture_ligne (nom2, 0, Contexte);



  for (i=1; i < Contexte.suivant; i++) {

    Lecture_ligne_old (nom, i, ligne);

    printf ("%s\n", ligne);

    // Interprete la ligne

    cr = sscanf (ligne, "%4s %2d/%2d %8c %25c",

          banque_init,

          &Jour, &Mois,

          Type, fiche.libelle);

    if (cr != 5) {

      printf ("Erreur scanf ligne \n");

    }

    if ((Mois == 1) && (Mois_Prec == 12)) {

      Annee++;

    }

    Mois_Prec = Mois;

    fiche.Date_Op = TDate (Jour, Mois, Annee);

    Type[8] = 0;

    fiche.mode_paiement.numero_chq = atol (Type);

    if (strcmp (Type, "CB.     ") == 0) {

      fiche.mode_paiement.type = TYPE_CB;

    }

    else if (strcmp (Type, "PREL.   ") == 0) {

      fiche.mode_paiement.type = TYPE_PREL;

    }

    else if (strcmp (Type, "VIR.    ") == 0) {

      fiche.mode_paiement.type = TYPE_VIR;

    }

    else if (strcmp (Type, "AUTRE   ") == 0) {

      fiche.mode_paiement.type = TYPE_AUTRE;

    }

    else {

      fiche.mode_paiement.type = TYPE_CHEQUE;

    }

    fiche.libelle[25] = 0;

    strncpy (credit, ligne+46, 8);

    credit[8]=0;

    strncpy (debit, ligne+55, 9);

    debit[9]=0;

    fiche.montant = TMontant (credit, 8) + TMontant (debit, 9);

    strncpy (fiche.code, ligne+65, 9);

    fiche.code[9]=0;

    if (strlen (ligne) <= 79) {

      fiche.Date_Marquage = TDate (1, 1, ANNEE_NON_MARQ);

    }

    else {

      cr = sscanf (ligne+75, "%2d/%2d", &Jour, &Mois);

      if (cr != 2) {

        printf ("Erreur scanf Marquage\n");

      }

      fiche.Date_Marquage = TDate (Jour, Mois, Annee);

    }

    Ecriture_ligne (nom2, i, fiche);

  }

  return 0;

}