Válí se ti projekty v šuplíku? Dostaň je mezi lidi a získej cool tričko a body na profi IT kurzy v soutěži ITnetwork summer 2017!
Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)

Diskuze: G-Code reader

Python Python G-Code reader

Aktivity (1)
Avatar
Makaron
Redaktor
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
Elisse
Člen
Avatar
Odpovídá na Makaron
Elisse: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.