Найти - Пользователи
Полная версия: Помогите отладить программу
Начало » Python для новичков » Помогите отладить программу
1
nibbler
Написал программу которая в файлике берет все даты записанные разнЫми форматами и приводит к одному виду. Конечный автомат в общем то. Она вот вроде бы и работает, но проблема в слеудующем. Когда запускаю компилятор (PyCharm) то форма сначала открывается и все кнопки отображаются но если нажать кнопку Do me! (это функция but_clicked) то программа зависает и не отвечает. Пожалуйста помогите решить

from Tkinter import *
from enum import Enum
import os
import tkFileDialog
import enum
ru=lambda x: x.decode('utf-8')
def Quit(ev):
    root.quit()
def LoadFile(ev):
    fn = tkFileDialog.Open(root, filetypes = [('*.txt files', '.txt')]).show()
    if fn == '':
        return
    textbox.delete('1.0', 'end')
    textbox.insert('1.0', open(fn, 'rt').read())
def SaveFile(ev):
    fn = tkFileDialog.SaveAs(root, filetypes = [('*.txt files', '.txt')]).show()
    if fn == '':
        return
    if not fn.endswith(".txt"):
        fn+=".txt"
    open(fn, 'wt').write(textbox.get('1.0', 'end'))
def but_clicked(self):
    in_file1="C:\\proga_mego\\main\\in_file.txt"
    out_file1="C:\\proga_mego\\main\\out_file.txt"
    in_file = open(in_file1,'r')
    out_file = open(out_file1,'w')
    hislo = ('1','2','3','4','5','6','7','8','9','0')
    EDate = (' ','.')
    Raz = ('.','-','/')
    State = enum.Enum
    ('start', 'X', 'XX','X.', 'X.X', 'X.X.', 'X.X.X', 'XXX', 'XXXX',
     'XXXX.', 'XXXX.X', 'XXXX.XX', 'XXXX.XX.', 'XXXX.XX.X', 'XXXX.XX.XX',
     'X.X.XX', 'X.X.XXX', 'X.X.XXXX', 'XX.', 'XX.X', 'XX.XX', 'XX.XX.',
     'XX.XX.X', 'XX.XX.XX', 'XX.XX.XXX', 'XX.XX.XXXX')
    state= 'start'
    while True:
        f= in_file.read(1)
        out_file.write(f)
        if f == '\n':
            break
        elif state=='start':
            if f in hislo:
                state='X'
            else:
                state= 'start'
        elif state=='X':
            if f in hislo:
                state='XX'
            elif f in Raz:
                state='X.'
            else:
                state= 'start'
        elif state=='XX':
            if f in hislo:
                state='XXX'
            elif f in Raz:
                state="XX."
            else:
                state= 'start'
        elif state =='X.':
            if f in hislo:
                state='X.X'
            else:
                state= 'start'
        elif state =='X.X':
            if f in Raz:
                state='X.X.'
            else:
                state= 'start'
        elif state =='X.X.':
            if f in hislo:
                state='X.X.X'
            else:
                state= 'start'
        elif state =='X.X.X':
            if f in hislo:
                state='X.X.XX'
            else:
                state= 'start'
        elif state =='XXX':
            if f in hislo:
                state='XXXX'
            else:
                state= 'start'
        elif state =='XXXX':
            if f in Raz:
                state='XXXX.'
            else:
                state='start'
        elif state =='XXXX.':
            if f in hislo:
                state='XXXX.X'
            else:
                state='start'
        elif state =='XXXX.X':
            if f in hislo:
                state='XXXX.XX'
            else:
                state='start'
        elif state =='XXXX.XX':
            if f in Raz:
                state='XXXX.XX.'
            else:
                state='start'
        elif state =='XXXX.XX.':
            if f in hislo:
                state='XXXX.XX.X'
            else:
                state='start'
        elif state =='XXXX.XX.X':
            if f in hislo:
                state='XXXX.XX.XX'
            else:
                state='start'
        elif state =='XXXX.XX.XX':
            if f in EDate:
                out_file.seek(-11, 1)
                in_file.seek(-3, 1)
                v= in_file.read(2)
                out_file.write(v)
                out_file.write('.')
                in_file.seek(-5, 1)
                v= in_file.read(2)
                out_file.write(v)
                out_file.write('.')
                in_file.seek(-7, 1)
                v= in_file.read(4)
                out_file.write(v)
                in_file.seek(6, 1)
                state='start'
            else:
                state='start'
        elif state =='X.X.XX':
            if f in EDate:
                out_file.seek(-7, 1)
                in_file.seek(-7, 1)
                v= in_file.read(1)
                out_file.write('0')
                out_file.write(v)
                out_file.write('.')
                in_file.seek(1, 1)
                v= in_file.read(1)
                out_file.write('0')
                out_file.write(v)
                out_file.write('.')
                in_file.seek(1, 1)
                v= in_file.read(2)
                out_file.write('19')
                out_file.write(v)
                state='start'
            elif f in hislo:
                state='X.X.XXX'
            else:
                state='start'
        elif state =='X.X.XXX':
            if f in hislo:
                state='X.X.XXXX'
            else:
                state='start'
        elif state =='X.X.XXXX':
            if f in EDate:
                out_file.seek(-9, 1)
                in_file.seek(-9, 1)
                v= in_file.read(1)
                out_file.write('0')
                out_file.write(v)
                out_file.write('.')
                in_file.seek(1, 1)
                v= in_file.read(1)
                out_file.write('0')
                out_file.write(v)
                out_file.write('.')
                in_file.seek(1, 1)
                v= in_file.read(4)
                out_file.write(v)
                state='start'
            else:
                state='start'
        elif state =='XX.':
            if f in hislo:
                state='XX.X'
            else:
                state='start'
        elif state =='XX.X':
            if f in hislo:
                state='XX.XX'
            else:
                state='start'
        elif state =='XX.XX':
            if f in Raz:
                state='XX.XX.'
            else:
                state='start'
        elif state =='XX.XX.':
            if f in hislo:
                state='XX.XX.X'
            else:
                state='start'
        elif state =='XX.XX.X':
            if f in hislo:
                state='XX.XX.XX'
            else:
                state='start'
        elif state =='XX.XX.XX':
            if f in hislo:
                state='XX.XX.XXX'
            elif f in EDate:
                out_file.seek(-9, 1)
                in_file.seek(-9, 1)
                v= in_file.read(2)
                out_file.write(v)
                out_file.write('.')
                in_file.seek(1, 1)
                v= in_file.read(2)
                out_file.write(v)
                out_file.write('.')
                in_file.seek(1, 1)
                out_file.write('19')
                v= in_file.read(2)
                out_file.write(v)
                state='start'
            else:
                state='start'
        elif state =='XX.XX.XXX':
            if f in hislo:
                state='XX.XX.XXXX'
            else:
                state='start'
        elif state =='XX.XX.XXXX':
            if f in EDate:
                out_file.seek(-11, 1)
                in_file.seek(-11, 1)
                v= in_file.read(2)
                out_file.write(v)
                out_file.write('.')
                in_file.seek(1, 1)
                v= in_file.read(2)
                out_file.write(v)
                out_file.write('.')
                in_file.seek(1, 1)
                v= in_file.read(4)
                out_file.write(v)
                state='start'
            else:
                state='start'
        else:
            pass
    in_file.close()
    out_file.close()
root = Tk()
panelFrame = Frame(root, height = 60, bg = 'gray')
textFrame = Frame(root, height = 340, width = 600)
panelFrame.pack(side = 'top', fill = 'x')
textFrame.pack(side = 'bottom', fill = 'both', expand = 1)
textbox = Text(textFrame, font='Arial 14', wrap='word')
scrollbar = Scrollbar(textFrame)
scrollbar['command'] = textbox.yview
textbox['yscrollcommand'] = scrollbar.set
textbox.pack(side = 'left', fill = 'both', expand = 1)
scrollbar.pack(side = 'right', fill = 'y')
loadBtn = Button(panelFrame, text = 'Load')
saveBtn = Button(panelFrame, text = 'Save')
quitBtn = Button(panelFrame, text = 'Quit')
button_done = Button(panelFrame, text='Do me!')
loadBtn.bind("", LoadFile)
saveBtn.bind("", SaveFile)
quitBtn.bind("", Quit)
button_done.bind("", but_clicked)
loadBtn.place(x = 10, y = 10, width = 40, height = 40)
saveBtn.place(x = 60, y = 10, width = 40, height = 40)
quitBtn.place(x = 170, y = 10, width = 40, height = 40)
button_done.place(x = 110, y = 10, width = 50, height = 40)
root.mainloop()
__author__ = 'nibbler'
fata1ex
Интересно, как вы хотите, чтобы мы её отлаживали? Логично, если программа зависает, значит надо искать проблему в условии выхода из бесконечного цикла. Можете попробовать поменять методику считывания файла (считывать построчно, например, или сразу все в память), чтобы не возникало вопросов, когда там будет ‘\n’.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB