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

Shell et commandes POSIX Discussion :

Débordement taille maximum script ksh --> Alternative


Sujet :

Shell et commandes POSIX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 48
    Par défaut Débordement taille maximum script ksh --> Alternative
    Bonjour,

    Je dois faire la migration d'un script vba en shell unix.

    L'objectif est de construire un fichier csv à partir de données brutes.
    Dans ce fichier je dois remplir un champs (nombre de mouvements) en fonction du champ contrat.

    En gros le champ Nombre de mouvement est égal à 0 sauf s'il ya doublons de contrat ID et dans ce cas le dernier doublons prend la valeur 1 et les champs précèdents ont la valeur 0

    Exemple:
    Contrat;Nombre de mouvements
    12;1
    45;0
    45;1
    78;0
    78;0
    78;1
    52;1
    47;0
    47;1
    J'ai essayé de faire ça en shell avec un tableau mais j'ai des problèmes sur la limite du tableau 1024 alors que j'ai plus de 8000 lignes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tab: subscript out of range
    Quelqu'un aurait il une idée sur comment je pourrai faire ca sans passer par les tableaux. Merci de votre aide

    Voici l'équivalence en vba


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     'Nombre de mouvements
        Nb_Colonnes = Nb_Colonnes + 1
        If (Donnees(Nb_Lignes, 2) = Donnees(Nb_Lignes - 1, 2) And Nb_Lignes > 2) Then
            Donnees(Nb_Lignes - 1, Nb_Colonnes) = 0
        ElseIf (Nb_Lignes > 2) Then
            Donnees(Nb_Lignes - 1, Nb_Colonnes) = 1

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 103
    Par défaut
    Bonjour.

    Il semble que tu donnes un exemple du résultat attendu, mais il manque le format des données d'entrée. Peux-tu le fournir?

    Es-tu contraint à 'ksh'?
    Pour dépasser les limites, as-tu (peux-tu) essayé(er) avec 'bash'?
    Sinon, il y a aussi awk et sed... (mais ça dépend de l'input)

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 48
    Par défaut
    Bonjour jack-ft,

    En entrée j'ai un fichier CSV avec différents champs délimités par un ;
    LE champ contrat représente le 1 er champ. En fonction de ce champ je dois remplir un autre champ (redondance ou pas).

    je ne suis pas contraint à ksh le bash m'irait bien aussi.

    En utilisant les tableaux j'ai le message d'erreur
    tab: subscript out of range --> limite tableau 1024.

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Salut,
    Citation Envoyé par moctarim Voir le message
    En entrée j'ai un fichier CSV avec différents champs délimités par un ;
    LE champ contrat représente le 1 er champ. En fonction de ce champ je dois remplir un autre champ (redondance ou pas).
    C'est un exemple CONCRET qu'il nous faut de ton fichier AVANT => APRÈS.

    Merci.

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 48
    Par défaut
    Citation Envoyé par zipe31 Voir le message
    Salut,


    C'est un exemple CONCRET qu'il nous faut de ton fichier AVANT => APRÈS.

    Merci.

    Bonjour,

    Voici les formats de fichiers en entree et sortie.

    Avant

    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
    Contrat_id
    14
    78
    45
    45
    12
    12
    12
    49
    32
    32
    96
    72
    398
    398

    Après
    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
    Contrat_id;Nombre de mouvement
    14;1
    78;1
    45;0
    45;1
    12;0
    12;0
    12;1
    49;1
    32;0
    32;1
    96;1
    72;1
    398;0
    398;1

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Une solution à base de "sed". Attention codeur sensible s'abstenir, tarabiscotage en vue

    Le fichier d'entrée :
    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
    $ cat plop 
    Contrat_id
    14
    78
    45
    45
    12
    12
    12
    49
    32
    32
    96
    72
    398
    398
    Le fichier de script pour "sed" :
    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
    $ cat script_sed 
    1 {
    s/.*/&;Nombre de mouvement/
    b
    }
    $ {
    s/$/;1/
    }
    N
    /\([^\n]*\).*\n\1$/ {
    bz
    }
    /\([^\n]*\).*\n\1$/! {
    s/\n/;1&/
    P
    D
    }
    :z
    s/\n/;0&/
    P
    D
    Le résultat :
    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
    $ sed -f script_sed plop 
    Contrat_id;Nombre de mouvement
    14;1
    78;1
    45;0
    45;1
    12;0
    12;0
    12;1
    49;1
    32;0
    32;1
    96;1
    72;1
    398;0
    398;1

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 103
    Par défaut
    Citation Envoyé par moctarim Voir le message
    Bonjour,

    Voici les formats de fichiers en entree et sortie.

    Avant

    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
    Contrat_id
    14
    78
    45
    45
    12
    12
    12
    49
    32
    32
    96
    72
    398
    398

    Après
    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
    Contrat_id;Nombre de mouvement
    14;1
    78;1
    45;0
    45;1
    12;0
    12;0
    12;1
    49;1
    32;0
    32;1
    96;1
    72;1
    398;0
    398;1
    Il semble que le fichier soit déjà trié sur le premier champ.
    Du coup, je pense qu'on doit pouvoir obtenir, avec awk, une solution lisible (donc adaptable)...

Discussions similaires

  1. taille maximum d'un div
    Par Anduriel dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 13/05/2005, 21h32
  2. Execution d'un script ksh distant
    Par jool dans le forum C++
    Réponses: 2
    Dernier message: 18/03/2005, 10h10
  3. Script ksh - Valeur maximal d'un PID
    Par fidififouille dans le forum Linux
    Réponses: 7
    Dernier message: 09/08/2004, 10h10
  4. Taille maximum de tableau en Delphi
    Par yannick37 dans le forum Langage
    Réponses: 5
    Dernier message: 03/03/2004, 13h18
  5. [Tableau] taille maximum
    Par vasilov dans le forum C
    Réponses: 15
    Dernier message: 01/08/2003, 10h52

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