Python编程实现对CodeSys中ST代码的自动排版(二)-CODESYS资源下载区-酷德网 - CoDeSys软件教程下载,CoDeSys工控资讯门户 

酷德网

HSC6150发布~
查看: 123|回复: 0

Python编程实现对CodeSys中ST代码的自动排版(二)

[复制链接]
  • TA的每日心情
    擦汗
    2019-8-13 14:13
  • 签到天数: 32 天

    [LV.5]常住居民I

    发表于 2020-8-7 16:41:24 | 显示全部楼层 |阅读模式
    由于刚学Python,对很多知识都还是一知半解,欢迎各位大侠给出宝贵意见。

    上篇随笔中的代码基础上,又做了一些修改,完善了一些功能。
    (1)能够缩进IF..ELSIF..ELSE..END_IF语句
    (2)能够缩进WHILE....END_WHILE语句
    (3)能够缩进FOR...END_FOR语句
    (4)能够简单的缩进CASE...END_CASE语句,由于没有很好的办法判断CASE项,就暂时对CASE之后的代码进行了4个字符的缩进,以上三条都是缩进2个字符。
    (5)对输入输出的文件名进行了判断。测试方法是把源文件和生成的文件都放在了Python文件的同一目录下。

    上代码(每行代码写的太长了,好像需要滚动条....   )

    [Python] 纯文本查看 复制代码
     #FormatCodeSysST.py
    #coding:gb2312
    import string
    getFile = raw_input("请输入要转换的文件名称(包括后缀名):")
    try:
    file_in= open(getFile,'r')
    Get_Flag = True
    except IOError:
    print "★文件读取失败★"
    raw_input("按回车键返回...")
    Get_Flag = False
    
    if Get_Flag:
    outputFile = raw_input("请输入转换后保存的文件名称(包括后缀名):")
    try:
    file_out = open(outputFile,'w')
    Out_Flag = True
    except:
    print "★文件保存失败★"
    raw_input("按回车键返回...")
    Out_Flag = False
    
    if Out_Flag:
    print "正在处理中,请稍候...."
    text1 = file_in.readline()
    lst1 = []
    #-----------------------------------------------------------------------------
    #删除行首和行末的空格
    while (text1 != ''):
    lst1.append(string.strip(text1))
    text1 = file_in.readline()
    indent = 0
    #-----------------------------------------------------------------------------
    #判断每一行的开头字符串,并根据不同的字符串进行不同的缩进
    for i in lst1:
    if (i[:3] == 'IF ') or (i[:3] == 'IF(') or (i[:len(i)]=='IF'): #if开头的行
    i = ' '*indent + i
    indent += 2
    elif (i[:5] == 'ELSE ')or (i[:len(i)] == 'ELSE') or (i[:5] == 'ELSE(') : #else开头的行
    indent -= 2
    i = ' '*indent + i
    indent += 2
    elif (i[:len(i)] == 'ELSIF')or (i[:6] == 'ELSIF ') or (i[:6] == 'ELSIF('): #elsif 开头的行
    indent -= 2
    i = ' '*indent + i
    indent += 2 
    elif (i[:7] =='END_IF ') or (i[:len(i)] =='END_IF') or (i[:7] =='END_IF('): #end_if开头的行
    indent -= 2
    i = ' '*indent + i
    elif i[:6] == 'WHILE ' or i[:len(i)] == 'WHILE': #while开头的行
    i = ' '*indent + i
    indent += 2
    elif (i[:len(i)] == 'END_WHILE') or i[:10] == 'END_WHILE(' or i[:10] == 'END_WHILE ' :#end_while开头的行
    indent -= 2
    i = ' '*indent + i
    elif i[:4] == 'FOR ': #for开头的行
    i = ' '*indent + i
    indent += 2
    elif (i[:len(i)] == 'END_FOR') or (i[:8] == 'END_FOR(')or (i[:8] == 'END_FOR '): #end_for开头的行
    indent -= 2
    i = ' '*indent + i 
    elif (i[:5]=='CASE '): #CASE开头的行
    i = ' '*indent + i
    indent += 4
    elif (i[:len(i)]=='END_CASE') or (i[:9]=='END_CASE(') or (i[:9]=='END_CASE '):#END_CASE开头的行
    indent -= 4 
    i = ' '*indent + i
    else:
    i = ' '*indent + i
    file_out.write(i + '\n')
    print '转换完成!'
    file_in.close()
    file_out.close()
    raw_input("按回车键返回...")

    打赏鼓励一下!
    +10
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

    本版积分规则

    
    顶部qrcode底部
    关注酷德网订阅号,获取更多资讯!

    QQ|小黑屋|手机版|Archiver|酷德论坛 ( 苏ICP备16065247号 )|网站地图

    GMT+8, 2020-11-26 17:07 , Processed in 0.229829 second(s), 54 queries .

    酷德网

    © 2001-2013 Hicodesys. 技术支持 by 酷德网

    快速回复 返回顶部 返回列表