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

Langage Delphi Discussion :

Traitement colonnes fichier texte


Sujet :

Langage Delphi

  1. #21
    Membre actif
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Décembre 2014
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Décembre 2014
    Messages : 105
    Points : 235
    Points
    235
    Par défaut
    Bonjour,
    Que de réponses pour un truc si trivial.
    Oui les mainframes communiquent souvent via fichiers .txt avec souvent une ligne header, des lignes data et une ligne footer, chacune ayant sont format bien défini.
    Ca se fait et se teste en 30 mn maxi, j'en ai fait (presque) des centaines.

    - Sur la table, un sql, ... peu importe, selon les order by et filtres désirés, appelée disons tbDATA
    - créer une procédure du genre ci dessous, qui utilisera la fonction format() pour formater toutes les colonnes.
    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
    const fmtHEADER : string = '%-12s %6d %-8s HEADER';
          fmtDATA   : string = '%-6s %-12s %4d %12.2f %12.2f %-30s %1s';
          fmtFOOTER : string = '%6d            FOOTER';
     
    var   fiText : Textfile;
     
    procedure tForm2.Sortie_TXT(Const heaNUM, NomFiText : string);
    var NbLi : integer;
        Ligne, vDate8 : string;
    begin
      assignfile(fiText, NomFiText);
      rewrite(fiText);
      vDate8 := formatdatetime('YYYYMMDD', Date);
      // format et writeln séparés pour pouvoir debuger Ligne
      Ligne := format(fmtHEADER, ['MVTCLI', heaNUM, vDate8]);
      writeln(fiText, Ligne);
     
      tbDATA.first;
      with tbDATA do while not eof do
      begin
        inc(NbLi);
        Ligne := Format( fmtDATA, [ FieldByName('FLD1').Asstring,
                                    FieldByName('FLD1').Asstring,
                                    FieldByName('FLD1').AsInteger,
                                    FieldByName('FLD1').AsCurrency,
                                    FieldByName('FLD1').AsCurrency,
                                    FieldByName('FLD1').Asstring,
                                    FieldByName('FLD1').Asstring ]);
        writeln(FiText, Ligne);
        next;
      end;
      Ligne := Format(fmtFOOTER, [NbLi]);
      writeln( FiText, Ligne);
      closeFile (FiText);
    end;
    Bon courage
    solilog

  2. #22
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut
    Bonjour tout le monde,

    Citation Envoyé par Charly910
    C'est ce que j'ai fait. Il reste juste à réécrire le fichier résultat alors que je l'ai juste écrit dans un mémo.
    Je l'ai tester et y a rien à dire. Votre solution est parfaite et y a rien a en rajouter j'aurais pas pu en faire une chose pareille, d'ailleurs mes recherches étaient infructueuses sur le net y et en a qui étaient coincés pour la lecture de colonnes sans obtenir de solutions. Pour la réécriture du résultat, il suffit juste d’éliminer les commentaires du memo qui viennent au dessus des colonnes et de faire un SaveToFile. Comme je l'ai dis plus haut, j'ai abandonner ce compo qui est très limité et donc j'ai dû changer de méthode de génération pour avoir plus de libérté au cas où le format d'import viendrait à changer. Le faire directement me simplifie en effet la tâche pour contrôler la taille des champs et éviter de relire ces colonnes. Au départ, je pensais que c’était énorme à faire mais il ne m' a suffit que quelques heures. Votre code me servira pour faire l'inverse c'est à dire la vérification au cas où l'utilisateur tripoterait le fichier avant son import dans l'autre application en principe le présent topic ne devrait se limiter qu'a la solution fournie.

    Encore merci Charly910
    Si quelqu'un t'a offensé, ne cherche pas à te venger; assieds-toi au bord de la rivière et, bientôt, tu verras passer son cadavre.

    Lao Tseu - un sage chinois

    Celui qui lutte contre les monstres doit veiller à ne pas le devenir lui-même.
    Et quand ton regard pénètre longtemps au fond d'un abîme, l'abîme, lui aussi, pénètre en toi.

    Friedrich Nietzsche - Par délà le bien et le mal

  3. #23
    Membre actif
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Décembre 2014
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Décembre 2014
    Messages : 105
    Points : 235
    Points
    235
    Par défaut
    Re
    Ravi que tu puisses en tirer qq'chose.
    Je te conseille de potasser la bonne vieille fonction format(), qui formate presque tous les types, int, float, longueur, nb de décimales, fillés de 0, ...,
    les string, longueur, converties maj/min, cadrées à droite/gauche, elle est idéale faire des fichiers d'interface.

    http://docs.embarcadero.com/products..._of_const.html

    solilog

  4. #24
    Membre actif
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Décembre 2014
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Décembre 2014
    Messages : 105
    Points : 235
    Points
    235
    Par défaut
    Ah un détail important si tu reprends ma procedure.
    J'ai oublié un "NbLi:=0" juste avant la boucle "with tbData do while not eof" sinon à la 2ème exec, y a des chances qu'il reprenne l'ancienne valeur de NbLi.
    sololog

  5. #25
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut
    Citation Envoyé par solilog
    Je te conseille de potasser la bonne vieille fonction format(),
    Et comment ! je ne peux m'en passer, cette fonction me suis tout le temps
    Merci pour ton code solilog
    Si quelqu'un t'a offensé, ne cherche pas à te venger; assieds-toi au bord de la rivière et, bientôt, tu verras passer son cadavre.

    Lao Tseu - un sage chinois

    Celui qui lutte contre les monstres doit veiller à ne pas le devenir lui-même.
    Et quand ton regard pénètre longtemps au fond d'un abîme, l'abîme, lui aussi, pénètre en toi.

    Friedrich Nietzsche - Par délà le bien et le mal

  6. #26
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    J'utilise aussi un format de fichier à colonne fixe pour piloter une machine, idem, Header, Body et Footer
    Par contre, pour la lecture \ écriture, je passe par des structures

    Pour des fichiers médicaux en 2005, j'avais utilisé la même technique avec des packed record mais car j'ai surtout de la lecture

    Pour l'écriture, je préfère aussi la simplicité et efficacité du Format
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. alignement colonne fichier texte (bloc note)
    Par finalbreizh dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 26/07/2017, 20h39
  2. Recherche lignes colonnes fichier texte
    Par gd74ad dans le forum C++/CLI
    Réponses: 3
    Dernier message: 07/12/2015, 12h30
  3. Lire une ligne et colonne fichier texte
    Par Naoli dans le forum Général Python
    Réponses: 4
    Dernier message: 24/11/2007, 12h56
  4. Réponses: 3
    Dernier message: 22/06/2006, 17h34
  5. export fichier texte et entête de colonne - DTS
    Par REMACC1 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 07/02/2006, 10h58

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