// 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;
}