零基础开发 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 相关文档。