Avatar
Slavomir
Redaktor
Avatar
Slavomir:

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. října 12:01
Avatar
Elisse
Člen
Avatar
Odpovídá na Slavomir
Elisse:

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. října 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.