NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: G-Code reader

Aktivity
Avatar
Makaron
Člen
Avatar
Makaron:31.10.2016 12:01

Ahojte, snažím sa vytvoriť program v Pythone, ktorý by čítal súbor s G-Codom.

Mám napr. takýto súbor:

G90 T0 F0,0
N0 G00 Z0
N1 G00 X2 Y5
N3 G01 Z-1 F0,0
N4 F0,0
N5 X2 Y6
N6 X2 Y5

A potrebujem aby program šiel riadok za riadkom, v každom cykle priradil každú hodnotu v riadku k premennej
napr. 3tí riadok N=3,G=1,Z=-1,F=0,0

Zatiaľ mám toto:

import re

f = open('test.txt', 'r')
ngz_reg = re.compile(r'N(?P<N>\d+(\.\d*)?) G(?P<G>-?\d+(\.\d*)?) Z(?P<Z>-?\d+(\.\d*)?)')
ngxy_reg = re.compile(r'N(?P<N>\d+(\.\d*)?) G(?P<G>-?\d+(\.\d*)?) X(?P<X>-?\d+(\.\d*)?) Y(?P<Y>-?\d+(\.\d*)?)')
nxy_reg = re.compile(r'N(?P<N>\d+(\.\d*)?) X(?P<X>-?\d+(\.\d*)?) Y(?P<Y>-?\d+(\.\d*)?)')

while f.readline():
    line = f.readline()

    ngz = ngz_reg.match(line)
    ngxy = ngxy_reg.match(line)
    nxy = nxy_reg.match(line)

    if ngz:
        n = int(ngz.groupdict()['N'])
        g = int(ngz.groupdict()['G'])
        z = int(ngz.groupdict()['Z'])
        print "N: {N}\tG: {G}\tZ: {Z}".format(**ngz.groupdict())

    elif ngxy:
        n = int(ngxy.groupdict()['N'])
        g = int(ngxy.groupdict()['G'])
        x = int(ngxy.groupdict()['X'])
        y = int(ngxy.groupdict()['Y'])
        print 'N: {N}\tG: {G}\tX:{X}\tY: {Y}'.format(**ngxy.groupdict())

    elif nxy:
        n = int(nxy.groupdict()['N'])
        x = int(nxy.groupdict()['X'])
        y = int(nxy.groupdict()['Y'])
        print 'N: {N}\tX: {X}\tY: {Y}'.format(**nxy.groupdict())

f.close()

Problém s tým je, že by som musel vytvoriť Regular Expression pre každý možný riadok. Potreboval by som niečo univerzálne, čo by všetky premenné v riadku priradilo do premennej. Máte nejaký nápad?

 
Odpovědět
31.10.2016 12:01
Avatar
Odpovídá na Makaron
Erik Šťastný:31.10.2016 15:31

Nedávno jsem zrovna dělal něco úplně stejného :)

Řádky si rozsplituj v tvém případě podle mezer do listu a pak už jen list[0] , list[1] atd. budeš mít parametry které chceš :)

 
Nahoru Odpovědět
31.10.2016 15:31
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.