首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Net徽标转换,向后兼容性

Net徽标转换,向后兼容性
EN

Stack Overflow用户
提问于 2017-02-24 15:40:15
回答 2查看 528关注 0票数 1

我想升级(如果是这样的话)一个100-150个国产的Netlogo 4.1.3程序,最好是通过Perl或另一种脚本语言批量升级,然后进行(必要的)手动检查和完成。

令我沮丧的是,Netlogo 6没有打开Netlogo 4文件,所以我升级了其中的几个文件,在Netlogo 5中打开它们,在Netlogo 6中保存和重新打开它们,然后保存它们。不是一种特别优雅的方式。

有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-25 22:55:36

看上去Netlogo 6之所以不读4.1.3文件是因为它需要12节,而4.1.3文件有10或11节。据我所知,部分是由字符串"@#$#@#$#@“分割的。此外,旧的.nlogo文件具有版本6所不理解的“CC窗口”的参数。最后,Net徽标6中的按钮也需要参数化,值为1或0,以确定该按钮是否被禁用,直到滴答开始。

下面的python3代码在同一个文件夹中获取所有网络徽标文件,并删除“CC窗口”行。它还在每个"Button“块的末尾添加了一个1。当代码读取文件时,它会计数"@#$#@#$#@“中断的数量。如果在文件的末尾,只有不到11,那么它就会附加足够的"@#$#@#$#@“中断,使总数达到11。

如果要运行此代码,我将将要更新的旧文件复制到新文件夹中。将.py文件与下面的代码放在同一个文件夹中,当您运行它时,它将为6.0兼容版本创建新的文件(注意到它不会只更新的4.1.3文件,但是会创建该文件夹中的任何net徽标文件< code >e 211)。这并不适用于每个文件--例如,一个文件没有正确更新,因为原始模型的“图形窗口”没有被正确地参数化。尽管如此,这段代码适用于我测试的大多数4.1.3模型库模型。另外,我只知道它允许你打开Netlogo 6中的文件,我不知道在那之后要做些什么来确保模型按照你的预期运行。

希望这能帮上忙!如果我对某些问题不清楚,请告诉我。

代码语言:javascript
复制
import os

with open("files_updated.txt", "w") as files:
    for filename in os.listdir("."):
        if filename.endswith(".nlogo") and not filename.startswith("6"):
            files.write(filename + '\n')
            opened = open(filename, "r")
            n = 0
            printat = -1
            cut_count = 0
            count_breakers = 0

            new_file_name = ("6_"+filename.strip(".txt") + ".nlogo")
            print(new_file_name)
            with open(new_file_name, "w") as out:
                for line in opened:
                    n += 1
                    if line == "@#$#@#$#@\n":
                        count_breakers += 1
                    if line == "CC-WINDOW\n":
                        cut_count = 8
                    cut_count -= 1
                    if cut_count < 0:
                        out.write(line) 

                    if line == "BUTTON\n" :
                        printat = n + 14

                    if printat == n:
                        out.write("1\n")

                if count_breakers < 11:
                    out.write("@#$#@#$#@\n" * (11 - count_breakers))
票数 3
EN

Stack Overflow用户

发布于 2017-08-02 20:49:24

这是一个简单转换脚本。请随意提出改进建议。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42442640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档