零基础开发 era 游戏 #14 TXT 其他文本文件

本家用法#

配置文件相关设置项#

使用专门的 ./sav/ 文件夹保存

详见「1.7. セーブデータを sav フォルダ内に作成する」。

セーブデータをsavフォルダ内に作成する:YES

UTF-8-BOM 编码格式保存

详见「5.13. セーブデータを UTF-8 で保存する」。

セーブデータをUTF-8で保存する:YES

写入 *.txt 文本文件 SAVETEXT#

int SAVETEXT(str text, int fileNo{, int force_savdir, int force_UTF8})

同时支持 命令(一般函数)和 行内函数 的用法。
使用命令时,返回值会保存到 RESULT,下同。

由于 LOADTEXT 的返回值是字符串,因此执行命令的结果会保存到对应的 RESULTS
不要看到说了「下同」就强行生搬硬套还当成 RESULT,请举一反三。

目标文本 保存到 txt123.txt

SAVETEXT "目标文本", 123

无视配置文件的设置,强制将 目标文本 作为 ./sav/txt123.txt 保存到单独的存档目录(./sav/)下:

SAVETEXT "目标文本", 123, 1

无视配置文件的设置,强制将 目标文本 作为 ./sav/txt123.txtUTF-8-BOM 编码保存到单独的存档目录(./sav/)下:(这也是最推荐的使用方法)

SAVETEXT "目标文本", 123, 1, 1

如果在短时间内频繁写入某一文件,由于杀毒软件等各种因素的影响,有可能会发生写入失败的情况。
请不要盲目信任这个函数,务必自行判断结果:

@SYSTEM_TITLE
    WHILE 1
        PRINTL 请输入要保存的文本:
        INPUTS
        IF RESULTS != ""
            SIF !SAVE_TEXT(RESULTS, 123)
                THROW 保存文本时发生错误
        ENDIF
    WEND
    QUIT


@SAVE_TEXT(text, file_no)
#FUNCTION
    #DIMS text
    #DIM file_no
    IF SAVETEXT(text, file_no, 1, 1)
        PRINTPLAINFORM [INFO] 写入 ./sav/txt{file_no}.txt 成功
        PRINTL
        RETURNF 1
    ELSE
        PRINTPLAINFORM [INFO] 写入 ./sav/txt{file_no}.txt 失败
        PRINTL
        RETURNF 0
    ENDIF

读取 *.txt 文本文件 LOADTEXT#

str LOADTEXT(int fileNo{, int force_savdir, int force_UTF8})

和写入一样,同时支持 命令(一般函数)和 行内函数 的用法。

当读取文本文件失败时,会返回空字符串。
因此只需要判断返回值是否为空就行了。

EE+EM 扩展功能#

强力安利这个 EM+EE 改进版。
这是目前功能最强大、设计最先进、更新最勤奋的 Emuera 版本,没有之一。
大家快来用啊。
两位作者都在我们的 Discord 里,有任何问题随时可以反馈。

读写任何格式的文本文件#

首先需要启用 EmueraEE+EM 的专属配置项 LOADTEXTとSAVETEXTで使える拡張子:txt
这里的 txt 可以换成任何想要读写的 文本文件格式,用半角逗号 , 分隔。
比如 LOADTEXTとSAVETEXTで使える拡張子:txt,csv,ini,xml,json

理论上你也可以加上 config,然后直接 通过代码 编辑「配置文件」。
叠甲:这里只是提出一种思路,一切后果由使用者自负。

推荐阅读 相关文档
一句话概括就是允许自定义(包括文件夹在内的)完整文件路径。

当然,为了安全起见,这个「完整路径」也是相对来说的。
你只被允许在 Emuera*.exe 同级或以下的子文件夹内读写文本文件。
不要试图用 ../ 访问父级目录,试了也没用(我试过了)。

其实就是将原本的 fileNo 这个参数扩展了。
除了像原来一样支持使用数值:比如 9527 的文件名为 txt9527.txt
现在还可以直接用 字符串 指定相对路径:比如 好耶,可以想改什么改什么了.txt

@SYSTEM_TITLE
    #DIMS content = "加我唯一指定QQ获取更多好康\n337845818"
    #DIMS path = "学习资料/行政管理/工商管理/传媒导体/老公不在家,少妇竟然.txt"
    IF SAVETEXT(content, path)
        PRINTL 写入文本文件成功
    ELSE
        PRINTL 写入文本文件失败
    ENDIF
    QUIT

正则匹配#

既然现在可以读取任何格式的文本文件,那么岂不是可以自己写文本解析器?

没错,如果你实在闲得蛋疼,可以尝试自行实现「在 era 里读取 JSON 格式文件」。

虽然 era 原生的字符串相关处理函数实在孱弱得可怜。

不过没关系,EE+EM 为你新增了「正则匹配」字符串功能!
想怎么造作,就怎么造。

@SYSTEM_TITLE
    #DIMS match_result, 100
    #DIM match_count
    #DIM group_count
    #DIM i
    #DIM j

    match_count = REGEXPMATCH("支持的格式:txt,csv,xml  ; 注释", "(;\\s*)?([^:,;\\s]+)([:,])?", group_count, match_result)
    IF match_count
        PRINTFORML 匹配结果数量: {match_count}  子表达式组数量: {group_count}
        PRINTL
        FOR i, 0, match_count
            PRINTFORML 匹配结果{i + 1}:
            FOR j, 0, group_count
                PRINTFORML 子表达式组{j}: <% match_result:(i * group_count + j) %>
            NEXT
            PRINTL
        NEXT
    ELSE
        PRINTL 匹配正则表达式失败
    ENDIF

    QUIT

如果报错 呼び出された変数"I"は設定により使用が禁止されています 的话,记得修改配置文件:

大文字小文字の違いを無視する:NO

让源代码区分大小写。

代码忽略大小写实在太他妈离谱了,出去不要说是我教的,丢不起那人。

正则表达式相关教程与工具

另外附赠一些正则表达式相关的教程与工具:

XML 格式解析#

摸了。

EE+EM 的中文文档,大部分是我翻译的,直接去看 XML 相关文档
看不懂再来 Discord 问。

MAP 系列命令用法#

同上。先看 MAP 相关文档

lackbfun © 2021 - 2024