解剖寒冰大大的进度存取范例
上星期研究了寒冰大大进度存取例子,终于有些心得,不过由于寒冰大大的例子有些臃肿,没有直指存取这个概念,在与主题无关的方面加入太多修饰,令她的方法不太明了。想起很久以前的一个例子,禁不住比较一番,收获很大。
首先精简一下寒冰大大的范例如下:
--初始化
SaveTextFile:=FileLocation^"save.txt"
--储存关键句
SaveString:=X^Tab^Y^Tab^Z^Return --保存的字符串
WriteExtFile(SaveTextFile, SaveString)
--读取关键句
ReadSave:=GetLine(ReadExtFile(SaveTextFile),ReadNum,ReadNum,Return)
P_X:=GetLine(ReadSave,1,1,Tab) --读取X值
P_Y:=GetLine(ReadSave,2,2,Tab) --读取Y值
P_Z:=GetLine(ReadSave,3,3,Tab) --读取Z值
--让我们一句句分析:(1)X、Y、Z是要储存的数值,P_X、P_Y、P_Z是分别要读取X、Y、Z存在外部文件中数值的自定义变量。
(2)SaveTextFile是一个新定义的自变量,(SaveTextFile:=FileLocation^"save.txt")这句的意思是把当前文件目录下的Save.txt文本文件的数值(或字符串)赋予SaveTextFile。(即SaveTextFile=save.txt)
(3)SaveString也是一个新定义的变量,它的值并不像A=15那样只有简单一个,而有三个(X、Y、Z)是标准的String形式。
(4)WriteExtFile是一个向程序外灌数值(字符串)的函数。
这句前半部份的意思是撰写SaveTextFile,由于“说明(2)”这时当前文件目录下会生成save.txt这个文件;
后半部份的意思指定要写入的内容,于是save.txt文件里就会灌入X、Y、Z的值。
(5)Readsave,它又是一个新定义的变量,它的任务是把save.txt的内容完全摄取,赋予它自己。
(6)ReadExtFile与WriteExtFile相反,它是一个从外读取数值(字符串)并赋予某个自定义变量的函数。ReadExtFile(SaveTextFile)的意思实际上就是ReadExtFile("save.txt")。
(7)GetLine的作用就是将SaveTextFile(save.txt)中的内容“有选择”地赋予变量(P_X、P_Y、P_Z)。
————————————————————————————————————————
在寒冰的范例中,由于涉及到判断SaveNum即存储个数的关系而将整个例子复杂化了。事实上在实际运用上,很少有把所有存档都存在同一个文件的做法,分开存储为save1、save2、save3、save4更有利于DEBUG和管理。
2001年的时候见过另一个相似的储存及读取的范例,具体谁做的忘了(好像叫秦什么的上海人,做过一个AW游戏),结构非常精简合理。它的写法是用WriteExtFile("保存文件名",数值1^Return^数值2^Return^数值3^Return^数值4^Return^数值5)来向外部写文件。范例如下:
WriteExtFile(".\\save.txt",Ta1^Return^Ta2^Return^Ta3^Return^Ta4^Return^Ta5)(注:TA1~5是自定义变量)
然后用一个自定义变量“GGGGG”把save.txt的内容完全摄取,具体做法如下:
GGGGG:=ReadExtFile("save.txt")
(这时save.txt的内容已经完全被GGGGG所摄取)
最后是用GetLine有选择地把GGGGG里的内容赋给具体的变量,格式也非常精简,如下:
ABC:=GetLine(GGGGG,1)
ABD:=GetLine(GGGGG,2)
ABE:=GetLine(GGGGG,3)
ABF:=GetLine(GGGGG,4)
ABG:=GetLine(GGGGG,5)
范例就此完成了。(注:ABC~ABG是自定义变量,ABC读取的值是GGGGG的第1行、ABD是第2行……以此类推ABG是第5行)
相比较之下,两个储存的例子虽然很相近但各有优劣,寒冰的例子由于加入了很多其它因素,会让人很费解,但她的^TAB^&^TAB^的write格式比^Return^&^Return^的格式缩进一些。尽管如此,谁会在意储存的文件格式是不是缩进呢,因此一般推荐另一个范例,精简明了,一看就懂。
最后,大家可以试着能否结合^TAB^^TAB^和^Return^^Return^的写方法,把两个范例整合在一起使用(关键在GetLine的写法上)。