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

Algorithmes et structures de données Discussion :

Décodage de codes ISO CNC


Sujet :

Algorithmes et structures de données

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 19
    Points : 8
    Points
    8
    Par défaut Décodage de codes ISO CNC
    Bonjour tous le monde,

    Je tourne en rond depuis plusieurs jours sur un problème...

    J'ai du code ISO CNC, en voilà un extrait ci-dessous, et je voudrais pouvoir parser tout ça ligne par lignes mais je ne sais pas vraiment comment le prendre ...

    Les espaces ne sont pas réguliers donc ce n'est pas évident ...

    Certain codes sont des mots clefs du langage iso (cf: https://fr.wikipedia.org/wiki/Progra...num%C3%A9rique)

    Les Axes machines ici sont connus sous les lettres, X, Y, Z, C, B1, B2, U1, U2

    Les "R" suivis de numéros sont des variables ( ex: R505)

    [Edit] les commentaires sont situés derrière les ";"

    Voilà je suis ouvert à vos propositions car pour le moment rien ne me vient à part peu être des usines à gaz très fortement liées mais ça ne me semble pas très pertinent ...

    Extrait d'un programme:

    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
    ;-----Ne pas toucher ces paramètres-----
    N20 R1000=-92.5 ;DEC U1
    N21 R1001=115.91 ;DEC U2
    ;-----------------------------------------------
    N22 M47
    N23 G90 G0 G603 M61 U1=66
    N24 G90 G0 G603 U2=0
    N25 G90 G0 G603 B1=0.00 B2=0.00 
    N26 M45 M55 
    N27 M43 M53 
     
    N28 G90 G0 G603 C=-90 Y=R600+R111-20.00
    N29 G90 G0 G603 X=18
    N30 G90 G0 G603  Z=83.80
    N31 M0
    N32 M60
    N33 M56
    N34 G0 G90 X=0 Y=(R600+R500+R540)  Z=R508
    N35 M57
    N36 M0
    N37 M60
    N38 M56
    N39 G0 G90 Y=IC(10)
    N40 G90 G0 G603 X=(R510+R505+2) Z=R508
    N41 G0 G90 Y=R600+R500 ;B1=IC(R502)
    N42 M42 
    N43 G90 G0 G601 X=(R510+R505+2) U1=(R1000+R510+R520+R505+R505+4) U2=(R1001-R530)
    N44 G90 G0 G601 X=(R510+R506) U1=(R1000+R510+R520+R506+R506) M44 ;Ecrasement
    N45 DEBUT:
    N46 M61
    N47 G90 G01 F=120000*1 G601 Y=R600 B1=(R112*1) B2=(R112*0)
    N48 M60
    N49 G90 G0 G603 U2=0 U1=66 M45 
    N50 G91 G0 X=5
    N51 G90 G0 G603  Z=R509
    N52 G90 G0 G603 X=(R511+2) U2=(R1001-R531-2) 
    N53 M42 
     
     
     
    N54  ; ----------CINTRE N°1------------
     
    N55 G91 G0 Y=R500-R540-R111
    N56 G91 G0 B1=IC(R502)
    N57 G90 G0 G601 X=18 U2=31.8
    N58 G90 G0 G601 U1=9.5 M44 
    N59 M61
    N60 G90 G0 B1=0
    N61 M60
     
    N62 STOPRE
    N63 ACC[Y]=100 ACC[C]=100
     
    N64 G91 G0  G601 C=+R113 Y=-(0.3142*R60*R113) M69;Cintrage
     
    N65 STOPRE
    N66 ACC[Y]=100 ACC[C]=100
    N67 G90 G0 M61
    N68 G90 G0 Y=92.7+R121+0
    N69 G90 G0 M60
    N70 G90 G0 G603 U2=(31.8-2) U1=IC(R0) 
    N71 M45
    N72 G90 G01 F=120000*1 G603 Y=IC(-20) U1=IC(20.00) X=(2+18) 
    N73 G90 G0 G603 C=-90
    N74 G90 G01 F=22500*1 G601 Y=92.7 B1=IC(R122*1) B2=IC(R122*0) U1=19.5 M42 
     
    N75  ; ----------CINTRE N°2------------
     
    N76 G90 G0 G601 X=18 U2=31.8
    N77 G90 G0 G601 U1=9.5 M44 
    N78 STOPRE
    N79 ACC[Y]=100 ACC[C]=100
     
    N80 G91 G0  G601 C=+R123 Y=-(0.3142*R60*R123) M69;Cintrage
     
    N81 STOPRE
    N82 ACC[Y]=100 ACC[C]=100
    N83 M61
    N84 G90 G0 Y=(R600+R131+R501)
    N85 G91 G0 B1=R503
    N86 M60
    N87 G91 G01 F=120000*1 G603 Y=-20 U1=20 X=5
    N88 G90 G0 G603 C=-90
    N89 G90 G0 G603 U2=0 U1=66 X=IC(30)  M45 
    N90 G90 G0 G603 Z=R508
    N91 G91 G0 Y=+20-R131+R501-R540 B1=R503

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Bonjour

    Ton message n'a pas de point d'interrogation. Il n'y a donc pas de question.

    De plus, il y a bien l'entrée. Mais pas la sortie souhaitée. Quelle est la sortie?

    S'il ne s'agit que d'une modification de fichier texte, personnellement, j'utiliserais awk. Il se moque du fait que la taille des champs diffèrent d'une ligne à l'autre.
    Cela dit, ça n'avance pas sur le plan algorithmique. Mais comme on ne sait pas ce que tu veux faire ...
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 19
    Points : 8
    Points
    8
    Par défaut
    erf .... effectivement je n'ai été très clair et concis ...

    Donc je formule une question pour éclaircir tout ça ^^

    Comment parser la ligne pour obtenir la liste des blocs contenus dans la ligne ?

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    N28 G90 G0 G603 C=-90   Y=R600+  R111-20.00 U1 = 66 X=IC(30)  M45
    Je voudrais en sortie stocker dans une variable
    N28
    G90
    G0
    G603
    C=-90
    Y=R600+R111-20.00
    U1=66
    X=IC(30)
    M45

    J'ai volontairement mis des espaces "random" dans le code car c'est la réalité, il n'y a pas de régularité dans la syntaxe des espaces.

    Voilà j'espère avoir été explicite cette fois ^^

    Chris

  4. #4
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Commande bash: (en 2 étages. Un pour supprimer les commentaires, un pour exploser la ligne en plusieurs lignes avec un bloc par ligne.)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 's@;.*@@' fichier | awk '!/^ *$/{print "\n"; for (i=1;i<=NF;i++) print $i}'
    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
    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
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    $ sed 's@;.*@@' fichier | awk '!/^ *$/{print "\n"; for (i=1;i<=NF;i++) print $i}'
     
    N20
    R1000=-92.5
     
     
    N21
    R1001=115.91
     
     
    N22
    M47
     
     
    N23
    G90
    G0
    G603
    M61
    U1=66
     
     
    N24
    G90
    G0
    G603
    U2=0
     
     
    N25
    G90
    G0
    G603
    B1=0.00
    B2=0.00
     
     
    N26
    M45
    M55
     
     
    N27
    M43
    M53
     
     
    N28
    G90
    G0
    G603
    C=-90
    Y=R600+R111-20.00
     
     
    N29
    G90
    G0
    G603
    X=18
     
     
    N30
    G90
    G0
    G603
    Z=83.80
     
     
    N31
    M0
     
     
    N32
    M60
     
     
    N33
    M56
     
     
    N34
    G0
    G90
    X=0
    Y=(R600+R500+R540)
    Z=R508
     
     
    N35
    M57
     
     
    N36
    M0
     
     
    N37
    M60
     
     
    N38
    M56
     
     
    N39
    G0
    G90
    Y=IC(10)
     
     
    N40
    G90
    G0
    G603
    X=(R510+R505+2)
    Z=R508
     
     
    N41
    G0
    G90
    Y=R600+R500
     
     
    N42
    M42
     
     
    N43
    G90
    G0
    G601
    X=(R510+R505+2)
    U1=(R1000+R510+R520+R505+R505+4)
    U2=(R1001-R530)
     
     
    N44
    G90
    G0
    G601
    X=(R510+R506)
    U1=(R1000+R510+R520+R506+R506)
    M44
     
     
    N45
    DEBUT:
     
     
    N46
    M61
     
     
    N47
    G90
    G01
    F=120000*1
    G601
    Y=R600
    B1=(R112*1)
    B2=(R112*0)
     
     
    N48
    M60
     
     
    N49
    G90
    G0
    G603
    U2=0
    U1=66
    M45
     
     
    N50
    G91
    G0
    X=5
     
     
    N51
    G90
    G0
    G603
    Z=R509
     
     
    N52
    G90
    G0
    G603
    X=(R511+2)
    U2=(R1001-R531-2)
     
     
    N53
    M42
     
     
    N54
     
     
    N55
    G91
    G0
    Y=R500-R540-R111
     
     
    N56
    G91
    G0
    B1=IC(R502)
     
     
    N57
    G90
    G0
    G601
    X=18
    U2=31.8
     
     
    N58
    G90
    G0
    G601
    U1=9.5
    M44
     
     
    N59
    M61
     
     
    N60
    G90
    G0
    B1=0
     
     
    N61
    M60
     
     
    N62
    STOPRE
     
     
    N63
    ACC[Y]=100
    ACC[C]=100
     
     
    N64
    G91
    G0
    G601
    C=+R113
    Y=-(0.3142*R60*R113)
    M69
     
     
    N65
    STOPRE
     
     
    N66
    ACC[Y]=100
    ACC[C]=100
     
     
    N67
    G90
    G0
    M61
     
     
    N68
    G90
    G0
    Y=92.7+R121+0
     
     
    N69
    G90
    G0
    M60
     
     
    N70
    G90
    G0
    G603
    U2=(31.8-2)
    U1=IC(R0)
     
     
    N71
    M45
     
     
    N72
    G90
    G01
    F=120000*1
    G603
    Y=IC(-20)
    U1=IC(20.00)
    X=(2+18)
     
     
    N73
    G90
    G0
    G603
    C=-90
     
     
    N74
    G90
    G01
    F=22500*1
    G601
    Y=92.7
    B1=IC(R122*1)
    B2=IC(R122*0)
    U1=19.5
    M42
     
     
    N75
     
     
    N76
    G90
    G0
    G601
    X=18
    U2=31.8
     
     
    N77
    G90
    G0
    G601
    U1=9.5
    M44
     
     
    N78
    STOPRE
     
     
    N79
    ACC[Y]=100
    ACC[C]=100
     
     
    N80
    G91
    G0
    G601
    C=+R123
    Y=-(0.3142*R60*R123)
    M69
     
     
    N81
    STOPRE
     
     
    N82
    ACC[Y]=100
    ACC[C]=100
     
     
    N83
    M61
     
     
    N84
    G90
    G0
    Y=(R600+R131+R501)
     
     
    N85
    G91
    G0
    B1=R503
     
     
    N86
    M60
     
     
    N87
    G91
    G01
    F=120000*1
    G603
    Y=-20
    U1=20
    X=5
     
     
    N88
    G90
    G0
    G603
    C=-90
     
     
    N89
    G90
    G0
    G603
    U2=0
    U1=66
    X=IC(30)
    M45
     
     
    N90
    G90
    G0
    G603
    Z=R508
     
     
    N91
    G91
    G0
    Y=+20-R131+R501-R540
    B1=R503
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  5. #5
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 278
    Points : 12 726
    Points
    12 726
    Par défaut
    Bonjour,
    [HS]
    Citation Envoyé par Flodelarab Voir le message
    Commande bash: (en 2 étages. Un pour supprimer les commentaires, un pour exploser la ligne en plusieurs lignes avec un bloc par ligne.)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 's@;.*@@' fichier | awk '!/^ *$/{print "\n"; for (i=1;i<=NF;i++) print $i}'
    Et en simplifiant, on peut supprimer la boucle explicite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 's@;.*@@' fichier | awk '!/^ *$/ && $1="\n"$1' OFS="\n"
    [/HS]
    Cordialement.

  6. #6
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 618
    Points : 188 591
    Points
    188 591
    Par défaut
    Sinon, si j'ai bien compris, tu lis le fichier ligne par ligne ; si une ligne commence par un point-virgule, tu l'ignores (tu lis la suite jusqu'à rencontrer une fin de ligne) ; sinon, tu lis des caractères jusqu'à trouver un espace, ça te fait un bloc.
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 19
    Points : 8
    Points
    8
    Par défaut
    Bonjour tout le monde,

    Désolé mais j'ai été trèèèèèèès occupé ces dernier jours .... Merci à tous pour vos réponses.

    La commande bash fait le café

    Merci encore

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

Discussions similaires

  1. plsql -code iso
    Par squalito dans le forum PL/SQL
    Réponses: 1
    Dernier message: 20/03/2009, 15h19
  2. Passage du code ISO-8859-1 en UTF-8 sous Eclipse
    Par Jerhom dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 26/05/2008, 11h07
  3. [Système] Code Iso ou "Clavier"?
    Par Anduriel dans le forum Langage
    Réponses: 1
    Dernier message: 17/08/2007, 00h28
  4. décodage de code-barres
    Par craryb dans le forum Traitement d'images
    Réponses: 4
    Dernier message: 09/08/2007, 10h30
  5. Récupérer le code ISO
    Par Casper_Delphi dans le forum Delphi
    Réponses: 3
    Dernier message: 12/03/2007, 12h04

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