零基础开发 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.txt 以 UTF-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 版本,没有之一。
大家快来用啊。
两位作者都在我们的 里,有任何问题随时可以反馈。
读写任何格式的文本文件#
首先需要启用 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 相关文档。