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

Autres langages Discussion :

[VMS] Trier un fichier type CSV


Sujet :

Autres langages

  1. #1
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut [VMS] Trier un fichier type CSV
    Bonjour,

    Je cherche à trier un fichier texte contenant des enregistrements dont les champs sont séparés par des points virgules (donc de taille variable).

    Mon programme est en DML mais rien ne m'empêche d'utiliser les commandes systèmes.

    J'ai cherché dans la doc (Sorting Files) mais la commande sort semble gérer que les fichiers à champs de taille fixe.

    Il existe une autre solution que transformer mon fichier ou le charger dans une table virtuelle ?

  2. #2
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Je vois que beaucoup de monde bosse sous VMS

    Bon du coup, j'ai opté pour la solution la plus simple : convertir le fichier en champs fixe, utiliser sort puis revenir au format CSV :

    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    PROCEDURE_FORM TRIE_FICHIER (#filename)
      #file_sort = "bidon_sort.txt"
      OPEN_TEXT/CREATE #file_sort AS sorted_file
      IF (%STATUS = %SUCCESS)
        OPEN_TEXT #filename AS file
        IF (%STATUS = %SUCCESS)
          #done = 0
          WHILE (#done <> 1)
            READ_LINE file /TARGET = #line
            IF (%STATUS = %SUCCESS)
              IF (#line <> "")
                PERFORM STR_SPLIT (#line, ";")
                #i = 1
                #sl = ""
                WHILE (#i <= #nbchamps)
                  #sl = #sl & MASK ("!- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", #champs(#i))
                  #i = #i + 1
                END_WHILE
                WRITE_LINE sorted_file #sl
              ELSE
                #done = 1
              END_IF
            ELSE
              #done = 1
            END_IF
          END_WHILE
          CLOSE_TEXT file
        END_IF
        CLOSE_TEXT sorted_file
    $ sort /KEY=(POS:1,SIZ:33,ASC) /KEY=(POS:34,SIZ:33,ASC) /KEY=(POS:67,SIZ:33,ASC) bidon_sort.txt bidon_sort.txt
      END_IF
    
      OPEN_TEXT/CREATE #filename AS file
      IF (%STATUS = %SUCCESS)
        OPEN_TEXT #file_sort AS sorted_file
        IF (%STATUS = %SUCCESS)
          #done = 0
          WHILE (#done <> 1)
            READ_LINE sorted_file /TARGET = #line
            IF (%STATUS = %SUCCESS)
              IF (#line <> "")
                #i = 1
                #sl = ""
                WHILE (#i <= #nbchamps)
                  IF (#i <> 1)
                    #sl = #sl & ";"
                  END_IF
                  #pos = ((#i - 1) * 33) + 1
                  #sl = #sl & LTRIM (MID (#line, #pos, 33))
                  #i = #i + 1
                END_WHILE
                WRITE_LINE file #sl
              ELSE
                #done = 1
              END_IF
            ELSE
              #done = 1
            END_IF
          END_WHILE
          CLOSE_TEXT sorted_file
        END_IF
        CLOSE_TEXT file
      END_IF
    
    END_FORM
    Pour info STR_SPLIT à partir d'une chaine et d'un délimiteur me retourne un tableau (#champs) ainsi que leur nombre (#nbchamps).

  3. #3
    ALT
    ALT est déconnecté
    Membre émérite
    Avatar de ALT
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2002
    Messages
    1 234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 234
    Points : 2 338
    Points
    2 338
    Par défaut
    Là, j'avoue que j'aurais eu du mal à te trouver une solution :
    - ça fait trop longtemps que je n'ai pas tripoté VMS
    - je crois n'avoir jamais eu besoin de trier un fichier.

    Bref, bravo si tu as trouvé une solution.
    « Un peuple qui est prêt à sacrifier un peu de liberté contre un peu de sécurité, ne mérite ni l'une, ni l'autre, et finira par perdre les deux. »
    Attribué indistinctement à :
    Thomas Jefferson
    Benjamin Franklin
    Albert Einstein !

  4. #4
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par ALT
    Bref, bravo si tu as trouvé une solution.
    Ouais c'est une solution, elle n'est pas top mais ça fonctionne

    J'ai réussi à éviter le pire : coder la fonction de trie, après je suis habitué en C à tout faire moi même, comme quoi ça sert !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment trier des fichiers par types et par tailles?
    Par xXO--Hades--OXx dans le forum Android
    Réponses: 3
    Dernier message: 07/12/2010, 12h09
  2. Rechercher des doublons dans un fichier de type csv
    Par phoenixatareva dans le forum C++
    Réponses: 6
    Dernier message: 12/08/2008, 20h02
  3. [CSV] Trier un fichier CSV
    Par arnaudperfect dans le forum Langage
    Réponses: 9
    Dernier message: 11/02/2008, 19h10
  4. Réponses: 1
    Dernier message: 02/11/2006, 10h40
  5. Trier les fichiers par type et les afficher par groupe ...
    Par KneXtasY dans le forum Autres Logiciels
    Réponses: 4
    Dernier message: 18/09/2005, 18h50

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