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

Linux Discussion :

[BASH] insertion de caractere et saut de ligne sur une ligne


Sujet :

Linux

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 11
    Points : 3
    Points
    3
    Par défaut [BASH] insertion de caractere et saut de ligne sur une ligne
    Bonjour,

    J'aurai besoin de vos lumières.

    Sur Unix/Linux j'ai un fichier composé d'une seule ligne de 2 700 000 caractères...
    Voici le début du fichier (j'ai remplacé les espaces par des "_"):
    "30004SCT_TARTENPION________________00003FONTEN"

    La difficulté c'est que je dois rajouté des ";" à des emplacement fixes(au bout de 5 caractères j'insère ";" puis après 32 caractères j'insère ";" puis après 9 caractères j'insère ";" etc...) et au bout de 900 caractères je dois sauter à la ligne et recommencer l'insertion des ";".
    Ce qui doit donner un fichier composé de 3000 lignes ayant cette tête :
    "30004;SCT_TARTENPION_________;_____;00003;FONTEN..."
    "55204;BLABLABLAET BLABLABLA___;-003-;00003;FONTEN..."
    J'ai pensé à sed ou awk , ou alors un autre language mais je sais pas comment faire.
    Si vous pouvez m'aider je vous en serez reconnaissant sur plusieurs générations

    Bonne Journée

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 417
    Points : 376
    Points
    376
    Par défaut
    si le perl ça te dit, j ai fait ça a la va vite; c est plus une démonstration de comment résoudre ton problème rapidement

    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
    #! /usr/local/bin/perl
     
    $SEP = "/";
    my $INPUT_FILE = ".".$SEP."defile_caract.txt";
     
    open (HANDLE_INPUT_FILE, $INPUT_FILE) || die "open problem of $INPUT_FILE : $!";
    $contenu = <HANDLE_INPUT_FILE>;
    close(HANDLE_INPUT_FILE);
     
    my $a1 = substr $contenu,0,5; #copie les 5 premiers caracteres
    my $contenu = substr $contenu,5; #supprime les 5 premiers caracteres
    my $a2 = substr $contenu,0,32; #copie les 32 caracteres suivants
    my $contenu = substr $contenu,32; #supprime les 32 caracteres suivants
    my $a3 = substr $contenu,0,9; #...
    my $contenu = substr $contenu,9;
     
    my $out = "$a1;$a2;$a3"; # copie et affiche 30004;SCT_TARTENPION_________;_____
    print $out;

    donne moi plus de précisions sur ton découpage et je te ferais un truc rapide, a toi de le perfectionner

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Juillet 2009
    Messages : 14
    Points : 21
    Points
    21
    Par défaut
    Bonjour,

    À mon avis, pour un problème de traitement caractère à caractère comme celui-ci, les outils comme sed ou awk ne conviendront pas trop car ils sont prévus pour traiter des lignes. Un ptit programme en C (en utilisant lex pour sauver quelques lignes de gestion de fichiers, par exemple) le ferait très bien.

    Un truc dans ce genre là :

    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
     
    %{
    #define EOLPOS 50
    static int pos[] = { 5, 37, 46 };
    static int i, n;
    %}
    %%
    . {
    	if (n == pos[i]) {
    		printf(";");
    		++i;
    	}
     
    	++n;
    	ECHO;
     
    	if (n == EOLPOS) {
    		printf("\n");
    		n = 0;
    		i = 0;
    	}
    }
    Il suffit après de remplacer EOLPOS par la taille de tes lignes et les nombres dans le tableau pos par les positions où il faut insérer des points-virgules. À adapter éventuellement, bien sûr.

    P.S. Si tu ne sais pas comment compiler ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lex source.l && cc lex.yy.c -ll

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 11
    Points : 3
    Points
    3
    Par défaut
    Vos solutions sont pas mal je vais essayer.

    il y 56 insertions à faire de ; la 57e est le retour à la ligne.
    Voila comme c'est :
    A=5
    B=32
    C=2
    D=13
    E=7
    F=16
    G=1
    H=9
    I=4
    J=18
    SEQUENCE=ABABABABABCABBBBDCABBBBEAEFGABBBBADEBBBBADEDCAAACAHIAIIIJ

    je pars du 1er caractère j'en saute 5(A) insertion ; j'en saute 32(B)insertion ; j'en saute 5(A) ...ainsi de suite( j'espère que c'est clair ).
    Au dernier saut(celui de 18 caractère(J) j'insere le saut de page.
    Je commence à coder je vous tiens au courant.
    Merci

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 417
    Points : 376
    Points
    376
    Par défaut
    la lose c est meme pas répétitif, en gros faut se taper les 56 instructions a la main

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 417
    Points : 376
    Points
    376
    Par défaut
    me revoila, c est a tester

    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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    #! /usr/local/bin/perl
     
    $SEP = "/";
    my $INPUT_FILE = ".".$SEP."defile_caract.txt";
    my $INPUT_FILE = ".".$SEP."defile_caract_out.txt";
     
    open (HANDLE_INPUT_FILE, $INPUT_FILE) || die "open problem of $INPUT_FILE : $!";
    $contenu = <HANDLE_INPUT_FILE>;
    close(HANDLE_INPUT_FILE);
     
    open (HANDLE_OUTPUT_FILE, ">$OUTPUT_FILE") || die "open problem of $OUTPUT_FILE : $!";
     
    for ($i=0; $i<3000; $i++){
    $a1 = substr $contenu,0,5;
    $contenu = substr $contenu,5;
    $a1 = "$a1;".substr $contenu,0,32;
    $contenu = substr $contenu,32;
    $a1 = substr $contenu,0,5;
    $contenu = substr $contenu,5;
    $a1 = "$a1;".substr $contenu,0,32;
    $contenu = substr $contenu,32;
    $a1 = substr $contenu,0,5;
    $contenu = substr $contenu,5;
    $a1 = "$a1;".substr $contenu,0,32;
    $contenu = substr $contenu,32;
    $a1 = substr $contenu,0,5;
    $contenu = substr $contenu,5;
    $a1 = "$a1;".substr $contenu,0,32;
    $contenu = substr $contenu,32;
    $a1 = substr $contenu,0,5;
    $contenu = substr $contenu,5;
    $a1 = "$a1;".substr $contenu,0,32;
    $contenu = substr $contenu,32;
    $a1 = "$a1;".substr $contenu,0,2;
    $contenu = substr $contenu,2;
    $a1 = substr $contenu,0,5;
    $contenu = substr $contenu,5;
    $a1 = "$a1;".substr $contenu,0,32;
    $contenu = substr $contenu,32;
    $a1 = "$a1;".substr $contenu,0,32;
    $contenu = substr $contenu,32;
    $a1 = "$a1;".substr $contenu,0,32;
    $contenu = substr $contenu,32;
    $a1 = "$a1;".substr $contenu,0,32;
    $contenu = substr $contenu,32;
    $a1 = "$a1;".substr $contenu,0,13;
    $contenu = substr $contenu,13;
    $a1 = "$a1;".substr $contenu,0,2;
    $contenu = substr $contenu,2;
    $a1 = substr $contenu,0,5;
    $contenu = substr $contenu,5;
    $a1 = "$a1;".substr $contenu,0,32;
    $contenu = substr $contenu,32;
    $a1 = "$a1;".substr $contenu,0,32;
    $contenu = substr $contenu,32;
    $a1 = "$a1;".substr $contenu,0,32;
    $contenu = substr $contenu,32;
    $a1 = "$a1;".substr $contenu,0,32;
    $contenu = substr $contenu,32;
    $a1 = substr $contenu,0,7;
    $contenu = substr $contenu,7;
    $a1 = substr $contenu,0,5;
    $contenu = substr $contenu,5;
    $a1 = substr $contenu,0,7;
    $contenu = substr $contenu,7;
    $a1 = "$a1;".substr $contenu,0,16;
    $contenu = substr $contenu,16;
    $a1 = substr $contenu,0,1;
    $contenu = substr $contenu,1;
    $a1 = substr $contenu,0,5;
    $contenu = substr $contenu,5;
    $a1 = "$a1;".substr $contenu,0,32;
    $contenu = substr $contenu,32;
    $a1 = "$a1;".substr $contenu,0,32;
    $contenu = substr $contenu,32;
    $a1 = "$a1;".substr $contenu,0,32;
    $contenu = substr $contenu,32;
    $a1 = "$a1;".substr $contenu,0,32;
    $contenu = substr $contenu,32;
    $a1 = substr $contenu,0,5;
    $contenu = substr $contenu,5;
    $a1 = "$a1;".substr $contenu,0,13;
    $contenu = substr $contenu,13;
    $a1 = substr $contenu,0,7;
    $contenu = substr $contenu,7;
    $a1 = "$a1;".substr $contenu,0,32;
    $contenu = substr $contenu,32;
    $a1 = "$a1;".substr $contenu,0,32;
    $contenu = substr $contenu,32;
    $a1 = "$a1;".substr $contenu,0,32;
    $contenu = substr $contenu,32;
    $a1 = "$a1;".substr $contenu,0,32;
    $contenu = substr $contenu,32;
    $a1 = substr $contenu,0,5;
    $contenu = substr $contenu,5;
    $a1 = "$a1;".substr $contenu,0,13;
    $contenu = substr $contenu,13;
    $a1 = substr $contenu,0,7;
    $contenu = substr $contenu,7;
    $a1 = "$a1;".substr $contenu,0,13;
    $contenu = substr $contenu,13;
    $a1 = substr $contenu,0,2;
    $contenu = substr $contenu,2;
    $a1 = substr $contenu,0,5;
    $contenu = substr $contenu,5;
    $a1 = substr $contenu,0,5;
    $contenu = substr $contenu,5;
    $a1 = substr $contenu,0,5;
    $contenu = substr $contenu,5;
    $a1 = substr $contenu,0,2;
    $contenu = substr $contenu,2;
    $a1 = substr $contenu,0,5;
    $contenu = substr $contenu,5;
    $a1 = "$a1;".substr $contenu,0,9;
    $contenu = substr $contenu,9;
    $a1 = "$a1;".substr $contenu,0,4;
    $contenu = substr $contenu,4;
    $a1 = substr $contenu,0,5;
    $contenu = substr $contenu,5;
    $a1 = "$a1;".substr $contenu,0,4;
    $contenu = substr $contenu,4;
    $a1 = "$a1;".substr $contenu,0,4;
    $contenu = substr $contenu,4;
    $a1 = "$a1;".substr $contenu,0,4;
    $contenu = substr $contenu,4;
    $a1 = "$a1;".substr $contenu,0,18;
    $contenu = substr $contenu,18;
     
    print HANDLE_OUTPUT_FILE "$a1\n";
    }
    close(HANDLE_OUTPUT_FILE);

  7. #7
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 739
    Points : 31 068
    Points
    31 068
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par mangalor Voir le message
    Vos solutions sont pas mal je vais essayer.

    il y 56 insertions à faire de ; la 57e est le retour à la ligne.
    Voila comme c'est :
    A=5
    B=32
    C=2
    D=13
    E=7
    F=16
    G=1
    H=9
    I=4
    J=18
    SEQUENCE=ABABABABABCABBBBDCABBBBEAEFGABBBBADEBBBBADEDCAAACAHIAIIIJ

    je pars du 1er caractère j'en saute 5(A) insertion ; j'en saute 32(B)insertion ; j'en saute 5(A) ...ainsi de suite( j'espère que c'est clair ).
    Au dernier saut(celui de 18 caractère(J) j'insere le saut de page.
    Je commence à coder je vous tiens au courant.
    Merci
    Ashin t'a donné une solution Perl. Je me dois donc, pour respecter le principe d'équité, t'en donner une en Python. Toutefois j'ai pas bien compris ces "A=5, B=32, C=18, etc. Je pense avoir compris que c'était les différentes positions où insérer un ";" mais pourquoi les nommer A, B, C... ?
    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
    #!/usr/bin/env Python
    # coding: Latin-1 -*-
     
    listeInsert=(5, 32, 2, 13, 7, 16, 1, 9, 4, 18)
     
    # Si j'ai bien compris, après avoir inséré le dernier ";" à la 18° position, faudra insérer un saut de ligne
    # Donc une ligne, du point de vie final, se caractérise par la somme des différentes positions d'insertion
    sizeLig=0
    for i in listeInsert: sizeLig+=i
     
    # Maintenant, on va traiter le fichier en le lisant par blocs de "sizeLig" caractères
    fp_in=open("fichier", "r")
    fp_out=open("result", "w")
    while True
        data=fp_in.read(sizeLig)
        if data == "": break
     
        # Traitement des insertions
        deb=0
        for i in listeInsert:
            fp_out.write("%s;" % data[deb:i])
            deb=i
        # for
     
        # Toutes les insertions ont été traitée - La ligne est terminée
        fp_out.write("\n")
    # for
     
    # Le fichier a été traité
    fp_in.close()
    fp_out.close()

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 11
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Toutefois j'ai pas bien compris ces "A=5, B=32, C=18, etc. Je pense avoir compris que c'était les différentes positions où insérer un ";" mais pourquoi les nommer A, B, C... ?
    Au lieu de préciser les positions d'insertion j'ai préféré (je trouve ça plus simple ) préciser le nombres de caractères à sauter entre chaque insertion.
    A signifie "saute 5 caractères", B correspond à "saute 32 caractères",...

    J'espère que c'est plus clair je vous tiens au courant dès que j'ai fini mes tâches quotidiennes du matin.

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 11
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Ashin Voir le message
    me revoila, c est a tester

    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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    #! /usr/local/bin/perl
     
    $SEP = "/";
    my $INPUT_FILE = ".".$SEP."defile_caract.txt";
    my $INPUT_FILE = ".".$SEP."defile_caract_out.txt";
     
    open (HANDLE_INPUT_FILE, $INPUT_FILE) || die "open problem of $INPUT_FILE : $!";
    $contenu = <HANDLE_INPUT_FILE>;
    close(HANDLE_INPUT_FILE);
     
    open (HANDLE_OUTPUT_FILE, ">$OUTPUT_FILE") || die "open problem of $OUTPUT_FILE : $!";
     
    for ($i=0; $i<3000; $i++){
    $a1 = substr $contenu,0,5;
    $contenu = substr $contenu,5;
    $a1 = "$a1;".substr $contenu,0,32;
    $contenu = substr $contenu,32;
    $a1 = substr $contenu,0,5;
    $contenu = substr $contenu,5;
    $a1 = "$a1;".substr $contenu,0,32;
    $contenu = substr $contenu,32;
    $a1 = substr $contenu,0,5;
    $contenu = substr $contenu,5;
    $a1 = "$a1;".substr $contenu,0,32;
    $contenu = substr $contenu,32;
    $a1 = substr $contenu,0,5;
    $contenu = substr $contenu,5;
    $a1 = "$a1;".substr $contenu,0,32;
    $contenu = substr $contenu,32;
    $a1 = substr $contenu,0,5;
    $contenu = substr $contenu,5;
    $a1 = "$a1;".substr $contenu,0,32;
    $contenu = substr $contenu,32;
    $a1 = "$a1;".substr $contenu,0,2;
    $contenu = substr $contenu,2;
    $a1 = substr $contenu,0,5;
    $contenu = substr $contenu,5;
    $a1 = "$a1;".substr $contenu,0,32;
    $contenu = substr $contenu,32;
    $a1 = "$a1;".substr $contenu,0,32;
    $contenu = substr $contenu,32;
    $a1 = "$a1;".substr $contenu,0,32;
    $contenu = substr $contenu,32;
    $a1 = "$a1;".substr $contenu,0,32;
    $contenu = substr $contenu,32;
    $a1 = "$a1;".substr $contenu,0,13;
    $contenu = substr $contenu,13;
    $a1 = "$a1;".substr $contenu,0,2;
    $contenu = substr $contenu,2;
    $a1 = substr $contenu,0,5;
    $contenu = substr $contenu,5;
    $a1 = "$a1;".substr $contenu,0,32;
    $contenu = substr $contenu,32;
    $a1 = "$a1;".substr $contenu,0,32;
    $contenu = substr $contenu,32;
    $a1 = "$a1;".substr $contenu,0,32;
    $contenu = substr $contenu,32;
    $a1 = "$a1;".substr $contenu,0,32;
    $contenu = substr $contenu,32;
    $a1 = substr $contenu,0,7;
    $contenu = substr $contenu,7;
    $a1 = substr $contenu,0,5;
    $contenu = substr $contenu,5;
    $a1 = substr $contenu,0,7;
    $contenu = substr $contenu,7;
    $a1 = "$a1;".substr $contenu,0,16;
    $contenu = substr $contenu,16;
    $a1 = substr $contenu,0,1;
    $contenu = substr $contenu,1;
    $a1 = substr $contenu,0,5;
    $contenu = substr $contenu,5;
    $a1 = "$a1;".substr $contenu,0,32;
    $contenu = substr $contenu,32;
    $a1 = "$a1;".substr $contenu,0,32;
    $contenu = substr $contenu,32;
    $a1 = "$a1;".substr $contenu,0,32;
    $contenu = substr $contenu,32;
    $a1 = "$a1;".substr $contenu,0,32;
    $contenu = substr $contenu,32;
    $a1 = substr $contenu,0,5;
    $contenu = substr $contenu,5;
    $a1 = "$a1;".substr $contenu,0,13;
    $contenu = substr $contenu,13;
    $a1 = substr $contenu,0,7;
    $contenu = substr $contenu,7;
    $a1 = "$a1;".substr $contenu,0,32;
    $contenu = substr $contenu,32;
    $a1 = "$a1;".substr $contenu,0,32;
    $contenu = substr $contenu,32;
    $a1 = "$a1;".substr $contenu,0,32;
    $contenu = substr $contenu,32;
    $a1 = "$a1;".substr $contenu,0,32;
    $contenu = substr $contenu,32;
    $a1 = substr $contenu,0,5;
    $contenu = substr $contenu,5;
    $a1 = "$a1;".substr $contenu,0,13;
    $contenu = substr $contenu,13;
    $a1 = substr $contenu,0,7;
    $contenu = substr $contenu,7;
    $a1 = "$a1;".substr $contenu,0,13;
    $contenu = substr $contenu,13;
    $a1 = substr $contenu,0,2;
    $contenu = substr $contenu,2;
    $a1 = substr $contenu,0,5;
    $contenu = substr $contenu,5;
    $a1 = substr $contenu,0,5;
    $contenu = substr $contenu,5;
    $a1 = substr $contenu,0,5;
    $contenu = substr $contenu,5;
    $a1 = substr $contenu,0,2;
    $contenu = substr $contenu,2;
    $a1 = substr $contenu,0,5;
    $contenu = substr $contenu,5;
    $a1 = "$a1;".substr $contenu,0,9;
    $contenu = substr $contenu,9;
    $a1 = "$a1;".substr $contenu,0,4;
    $contenu = substr $contenu,4;
    $a1 = substr $contenu,0,5;
    $contenu = substr $contenu,5;
    $a1 = "$a1;".substr $contenu,0,4;
    $contenu = substr $contenu,4;
    $a1 = "$a1;".substr $contenu,0,4;
    $contenu = substr $contenu,4;
    $a1 = "$a1;".substr $contenu,0,4;
    $contenu = substr $contenu,4;
    $a1 = "$a1;".substr $contenu,0,18;
    $contenu = substr $contenu,18;
     
    print HANDLE_OUTPUT_FILE "$a1\n";
    }
    close(HANDLE_OUTPUT_FILE);
    merci cela a du être un peu fastidieux maintenant pourvu que perl tourne sur la bécanne...

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 417
    Points : 376
    Points
    376
    Par défaut
    Citation Envoyé par mangalor Voir le message
    merci cela a du être un peu fastidieux maintenant pourvu que perl tourne sur la bécanne...
    j ai fait avec des copier coller, la meilleure solution serait de stocker la séquence dans un tableau puis de faire un "foreach élément dans tableau"
    mais bon pas le temps

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 11
    Points : 3
    Points
    3
    Par défaut

    PERL pas marcher sur cette machine...et peux pas l'installer.

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 417
    Points : 376
    Points
    376
    Par défaut
    comment on peut avoir sh, csh ... sans perl

  13. #13
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 11
    Points : 3
    Points
    3
    Par défaut
    Arf les machines de prod !!!

    Alors j'y suis presque le découpage est bon sauf que j'utilise cut et ce méchant il garde pas les espaces.

  14. #14
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 739
    Points : 31 068
    Points
    31 068
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par mangalor Voir le message
    Arf les machines de prod !!!

    Alors j'y suis presque le découpage est bon sauf que j'utilise cut et ce méchant il garde pas les espaces.
    echo chaine |cut -cx-y => coupe ta chaine sur les positions de x à y, espace inclus.

    Citation Envoyé par mangalor Voir le message
    Au lieu de préciser les positions d'insertion j'ai préféré (je trouve ça plus simple ) préciser le nombres de caractères à sauter entre chaque insertion.
    A signifie "saute 5 caractères", B correspond à "saute 32 caractères",...
    Ok, compris - Juste changer qq points dans la gestion des nombres et ça marchera

    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
    #!/usr/bin/env Python
    # coding: Latin-1 -*-
     
    listeSalt=(5, 32, 2, 13, 7, 16, 1, 9, 4, 18)
     
    # Une ligne, du point de vie final, se caractérise par la somme des différentes positions de saut
    sizeLig=0
    for i in listeSalt: sizeLig+=i
     
    # Maintenant, on va traiter le fichier en le lisant par blocs de "sizeLig" caractères
    fp_in=open("fichier", "r")
    fp_out=open("result", "w")
    while True
        data=fp_in.read(sizeLig)
        if data == "": break
     
        # Traitement des sauts
        cur=0
        for i in listeSalt:
            fp_out.write("%s;" % data[cur:cur+i])
            cur+=i
        # for
     
        # Toutes les insertions ont été traitée - La ligne est terminée
        fp_out.write("\n")
    # for
     
    # Le fichier a été traité
    fp_in.close()
    fp_out.close()

  15. #15
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 11
    Points : 3
    Points
    3
    Par défaut
    Solution trouvé sur un fofo us(www.unix.com)

    Merci à tous et comme ça pourrait être utile voici la solution finale
    En perl la boucle lit le fichier entré en variable et insert les caractères ";" puis le fin de ligne à 900.
    Une fois terminé on remplace par rien les 14 derniers caractères(qui commence par 0,1 ou 2) de chaque lignes et créé un fichier "_traite", voilou.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    perl -ne 'chomp;
        while(/(.)/g){
           $i++; print $1; $x=$i%900;
           if ($x == 0){print "\n"}
           elsif ($x==5 or $x==37 or $x==42 or $x==74 or $x==79 or $x==111 or $x==116 or $x==148 or $x==153 or $x==185 or $x==187 or $x==192 or $x==224 or $x==256 or $x==288 or $x==320 or $x==333 or $x==335 or $x==340 or $x==372 or $x==404 or $x==436 or $x==468 or $x==475 or $x==480 or $x==487 or $x==503 or $x==504 or $x==509 or $x==541 or $x==573 or $x==605 or $x==637 or $x==642 or $x==655 or $x==662 or $x==694 or $x==726 or $x==758 or $x==790 or $x==795 or $x==808 or $x==815 or $x==828 or $x==830 or $x==835 or $x==840 or $x==845 or $x==847 or $x==852 or $x==861 or $x==865 or $x==870 or $x==874 or $x==878 or $x==882){print ";"}
           }' $1 | sed -e 's/[0-2]             $//' > $1_traite

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/01/2015, 19h30
  2. Réponses: 10
    Dernier message: 11/04/2008, 14h37
  3. Detecter un changement sur une ligne dans une JTable
    Par RR instinct dans le forum Composants
    Réponses: 8
    Dernier message: 10/04/2008, 13h58
  4. [WD5.5]Focus sur une ligne d'une table
    Par roms19 dans le forum WinDev
    Réponses: 3
    Dernier message: 27/06/2007, 18h34
  5. Tracer une ligne sur une image
    Par Guillaume602 dans le forum Windows
    Réponses: 5
    Dernier message: 05/01/2006, 21h33

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