IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Free Pascal Discussion :

Transfert des fichiers de données créés sous TP vers Free Pascal


Sujet :

Free Pascal

  1. #1
    Membre à l'essai
    Homme Profil pro
    ingenieur
    Inscrit en
    Octobre 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ingenieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2012
    Messages : 22
    Points : 17
    Points
    17
    Par défaut Transfert des fichiers de données créés sous TP vers Free Pascal
    Bonjour
    je programme depuis longtemps en TP et souhaite transférer mes programmes sous Free Pascal.
    A priori, je ne suis pas limité en taille mémoire ce qui est le cas avec TP : 640K.
    J'ai donc commencer à transferer, cela fonctionne après quelques modifs, mais je rencontre un problème avec les fichiers de données (fichiers à accès direct créés sous TP).
    Free Pascal les reconnaît, il reconnaît la taille, mais lorsque je veux lire un enregistrement du fichier il trouve 0 alors que TP lit la valeur correcte.

    Le type de l'enregistrement est REAL.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    TVOL_ENR  = RECORD
        CODE      : STRING [12];
        LIB       : STRING [50];
        POS       : WORD;
        NB        : WORD;
        MOY       : REAL;
        ECT       : REAL;
        END;
    Est-ce normal ?
    Faut-t-il alors créer ses fichiers de données sous Free Pascal ?
    Merci de votre aide.

  2. #2
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Bonjour et bienvenue dans le forum !

    Oui, c'est normal que le programme compilé avec Free Pascal ne sache pas lire les fichiers créés avec Turbo Pascal. Les types ne sont pas les mêmes, même quand ils portent le même nom, sans parler d'autres raisons que j'ignore. Donc il faut recréer vos fichiers avec Free Pascal.

    Maintenant, si vous avez vraiment vraiment besoin de lire les anciens fichiers, c'est peut-être possible mais personnellement je ne pourrais pas vous en donner l'assurance. Une autre possibilité, peut-être plus facile à mettre en œuvre, serait d'écrire un programme avec TP pour convertir les données en texte, par exemple au format CSV. A ce moment-là le changement de compilateur ne poserait plus problème.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  3. #3
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Jua,

    Je n'utilise plus Pascal depuis longtemps, mais il y a au moins :

    Le type string de TP correspond à shortstring pour FreePascal.

    Pour les autres types, ça ne devrait pas changer, à moins que FreePascal ait redéfini le type REAL.

    Si les cons volaient, il ferait nuit à midi.

  4. #4
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par droggo Voir le message
    Le type string de TP correspond à shortstring pour FreePascal.

    Pour les autres types, ça ne devrait pas changer, à moins que FreePascal ait redéfini le type REAL.
    J'imaginais, je ne sais trop pourquoi, qu'il y avait d'autres différences, que chaque compilateur avait sa façon d'écrire et lire les données. Je viens de faire un essai consistant à écrire un fichier avec Free Pascal et à le lire avec Delphi : ça a fonctionné. Donc, je retire ce que j'ai dit : il est peut-être possible de lire avec Free Pascal des fichiers créés avec TP.

    Dans ce cas, il faudrait peut-être faire un essai en utilisant le mode de compatibilité avec Turbo Pascal :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    program Lire;
    {$MODE TP}
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  5. #5
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    J'ai fait un test. Effectivement le programme compilé avec Free Pascal lit correctement les valeurs de types string[n] et word, mais pas les valeurs de type real. Les types sont différents d'un compilateur à l'autre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ----------------------------------------------------------------------
        | Type | Range                       | Significant digits | Size
    ----------------------------------------------------------------------
    TP7 | Real | 2.9 * 10^-39 .. 1.7 * 10^38 | 11-12              | 6
    ----------------------------------------------------------------------
    FPC | Real | platform dependant          | ???                | 4 or 8
    ----------------------------------------------------------------------
    Je joins tous mes fichiers, si quelqu'un veut se pencher sur le problème sans refaire tout le travail.

    J'ai lu une discussion similaire sur un forum anglophone. Quelqu'un suggérait de convertir les données avec TP7 en remplaçant le type real par une autre type, single ou double.
    Fichiers attachés Fichiers attachés
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  6. #6
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Ayant remarqué que le type double avait les mêmes caractéristiques pour les deux compilateurs, j'ai essayé la chose suivante (que j'ai dû compiler en mode 8087). Ça n'a pas réussi : Free Pascal ne savait toujours pas lire les données correctement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    program Convert;
     
    type
      TVOL_ENR = record
        CODE: string[12];
        LIB: string[50];
        POS: WORD;
        NB: WORD;
        MOY: REAL;
        ECT: REAL;
      end;
     
      TVOL_ENR2 = record
        CODE: string[12];
        LIB: string[50];
        POS: WORD;
        NB: WORD;
        MOY: DOUBLE;
        ECT: DOUBLE;
      end;
     
    var
      e: TVOL_ENR;
      e2: TVOL_ENR2;
      f: file of TVOL_ENR;
      f2: file of TVOL_ENR2;
     
    begin
      Assign(f, 'donnees.dat');
      Reset(f);
      Assign(f2, 'donnees2.dat');
      Rewrite(f2);
     
      while not Eof(f) do
      begin
        Read(f, e);
     
        e2.code := e.code;
        e2.lib := e.lib;
        e2.pos := e.pos;
        e2.nb := e.nb;
        e2.moy := e.moy;
        e2.ect := e.ect;
     
        Write(f2, e2);
      end;
     
      Close(f);
      Close(f2);
    end.
    En revanche, la solution suivante fonctionne : un programme TP7 qui convertit le fichier de données en texte et un programme Free Pascal qui lit le texte et écrit un nouveau fichier de données.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    program Data2Txt;
     
    (* TP7 *)
     
    type
      TVol_enr = record
        code: string[12];
        lib: string[50];
        pos: word;
        nb: word;
        moy: real;
        ect: real;
      end;
     
    const
      DAT = 'donnees.dat';
      TXT = 'donnees.txt';
     
    var
      e: TVol_enr;
      f: file of TVol_enr;
      t: text;
     
    begin
      Assign(f, DAT);
      Reset(f);
      Assign(t, TXT);
      Rewrite(t);
      while not Eof(f) do
      begin
        Read(f, e);
        WriteLn(t, e.code);
        WriteLn(t, e.lib);
        WriteLn(t, e.pos);
        WriteLn(t, e.nb);
        WriteLn(t, e.moy);
        WriteLn(t, e.ect);
      end;
      Close(f);
      Close(t);
    end.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    program Txt2Data;
    {$APPTYPE CONSOLE}
     
    // FPC
     
    type
      TVol_enr = record
        code: string[12];
        lib: string[50];
        pos: word;
        nb: word;
        moy: single;
        ect: single;
      end;
     
    const
      TXT = 'donnees.txt';
      DAT = 'nouvelles_donnees.dat';
     
    var
      e: TVol_enr;
      t: text;
      f: file of TVol_enr;
     
    begin
      Assign(t, TXT);
      Reset(t);
      Assign(f, DAT);
      Rewrite(f);
     
      while not Eof(t) do
      begin
        ReadLn(t, e.code);
        ReadLn(t, e.lib);
        ReadLn(t, e.pos);
        ReadLn(t, e.nb);
        ReadLn(t, e.moy);
        ReadLn(t, e.ect);
        {
        WriteLn(e.code);
        WriteLn(e.lib);
        WriteLn(e.pos);
        WriteLn(e.nb);
        WriteLn(e.moy);
        WriteLn(e.ect);
        }
        Write(f, e);
      end;
     
      Close(t);
      Close(f);
    end.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    program Test;
    {$APPTYPE CONSOLE}
     
    // FPC
    // Essai de lecture du nouveau fichier de données
     
    type
      TVol_enr = record
        code: string[12];
        lib: string[50];
        pos: word;
        nb: word;
        moy: single;
        ect: single;
      end;
     
    const
      DAT = 'nouvelles_donnees.dat';
     
    var
      e: TVol_enr;
      f: file of TVol_enr;
     
    begin
      Assign(f, DAT);
      Reset(f);
     
      while not Eof(f) do
      begin
        Read(f, e);
     
        WriteLn(e.code);
        WriteLn(e.lib);
        WriteLn(e.pos);
        WriteLn(e.nb);
        WriteLn(e.moy);
        WriteLn(e.ect);
      end;
     
      Close(f);
      ReadLn;
    end.
    Dans mon programme, j'ai choisi de remplacer le type real par le type single, parce que je crois savoir qu'il est déconseillé d'employer le type real. J'aurais pu aussi utiliser le type double. A vous de voir !
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  7. #7
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Jao,
    Citation Envoyé par Roland Chastain Voir le message
    Dans mon programme, j'ai choisi de remplacer le type real par le type single, parce que je crois savoir qu'il est déconseillé d'employer le type real. J'aurais pu aussi utiliser le type double. A vous de voir !
    En passant du type REAL à SINGLE en TP, tu perds de la précision, DOUBLE serait préférable.

    ET oui, il est déconseillé d'utiliser le REAL de TP, car il n'est pas standard, et n'utilise pas le 8087, bonjour le temps de calcul (d'un autre côté, au début de TP, tous les ordis ne disposaient pas du 8087, qui ajoutait un coût non négligeable à un tarif déjà costaud).

    Si les cons volaient, il ferait nuit à midi.

  8. #8
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par droggo Voir le message
    En passant du type REAL à SINGLE en TP, tu perds de la précision, DOUBLE serait préférable.
    Effectivement. Merci droggo pour la précision.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    --------------------------------------------------------------------------
        | Type   | Range                         | Significant digits | Size
    --------------------------------------------------------------------------
    TP7 | Real   | 2.9 * 10^-39 .. 1.7 * 10^38   | 11-12              | 6
    --------------------------------------------------------------------------
    FPC | Real   | platform dependant            | ???                | 4 or 8
    --------------------------------------------------------------------------
    FPC | Single | 1.5 * 10 ^-45 .. 3.4 * 10^38  | 7-8                | 4
    --------------------------------------------------------------------------
    FPC | Double | 5.0 * 10^-324 .. 1.7 * 10^308 | 15-16              | 8
    --------------------------------------------------------------------------
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  9. #9
    Membre à l'essai
    Homme Profil pro
    ingenieur
    Inscrit en
    Octobre 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ingenieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2012
    Messages : 22
    Points : 17
    Points
    17
    Par défaut
    merci à tous de vos réponses.
    Il est vrais qu' a priori que seul les fichiers texte sont lisibles sans problème par free pascal.
    J'ai donc opté de refaire la création de tous les fichiers de données sous Free pascal, à partir les données d'origine qui sont or format texte (fichier CSV ).
    (le programme va chercher les informations dans les fichiers texte et les transforment en les plaçant au bon endroit sous la bonne forme dans les fichiers de données)

    Mais je galère avec le transfert des programmes TP vers free pascal, ce n'est pas automatique, il y a des petites différences, mais ca se fait.

    Je ne savais pas que le type REAL ralentissait les calculs, je l'utilisais pour des raisons de gain de mémoire, étant donné que c'est la raison qui me fait passé de TP à FREE P.
    Que me conseillez vous, pour la calcul , quel type de variable, double ? extended ? je cherche avant tout de la vitesse de calcul.

    Je pense que je n'ai plus grand chose à apprendre du coté de TP par contre pour free Pascal, il y a t-il un livre , un tuto, .. qui explique les instructions, les différences entre TP et free Pascal?

    Je voudrai savoir également si free pascal est capable de télécharger en temps réel des données sur différents sites internet, comme le fait Visual Basic dans les macros d'Excel?

    merci de vos réponses

Discussions similaires

  1. Gestion des fichiers XML et ASC3 sous Flex:
    Par silverfab34 dans le forum Flex
    Réponses: 2
    Dernier message: 18/07/2007, 17h34
  2. Réponses: 1
    Dernier message: 03/07/2007, 18h23
  3. Réponses: 2
    Dernier message: 21/04/2007, 20h19
  4. [C#] [.NET CF] des fichiers de données avec l'application
    Par safisoft13 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 06/06/2005, 09h30
  5. Comparer des fichiers de données : Quel Langage ?
    Par Anonymous dans le forum Langages de programmation
    Réponses: 6
    Dernier message: 24/04/2002, 22h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo