文件读写

文件读写对制作游戏很有帮助。可以调用别的文件中的代码,保存最高分、游戏存档、玩家状态等信写到文件中。

首先,让我们看一个简单的命令:dofile。这个命令会读入另一个文件的代码并立即执行。

代码:

dofile("./test.lua")

很简单的命令。注意 ./ 是指根目录,不是子目录。如果是子目录,应该这样用:

代码:

dofile("./files/test.lua")

  那么,如果我们的文件 test.lua 包含下述代码:

代码:

playerx = 10 playery = 20 enemyx = 40 enemyy = 50

  一旦我们用 dofile 调用这个文件,这些变量将立即得到声明。文件不是非得用 lua 后缀,txt 或其他后缀都可以。

从文件中读取一行:

  假设你有一个很多行文本的文件,你想从中读取一行,并打印到屏幕上。为此我们可以使用 io.open() 命令打开文件并读取。

  命令的语法是 io.open(filename, mode)。此处我们将使用 r 作为 mode 的值,意指读取(read)模式。作为参考,下面是所有可用模式的列表:

引用:

r - 读取模式w - 写入模式(覆盖现有内容)

a - 附加模式(附加在现有内容之后)

b - 二进制模式

r+ - 读取更新模式(现有数据保留)

w+ - 写入更新模式(现有数据擦除)

a+ - 附加更新模式(现有数据保留,只在文件末尾附加)

第一件要做的事情就是打开文件并存为一个变量。看下面。

代码:

file = io.open("testRead.txt", "r")

  现在我们的文件 testRead.txt 已打开并处于读取模式。接着我们使用 read() 命令读取文件中的单行内容存为另一个变量。

代码:

ourline = file:read()

  这将读取我们的文本文件的第一行。下一次我们使用 read() 命令它将读取第二行。再下一次它会读取第三行,依此类推。

  请注意,此命令前的 file 是我们之前打开文件并保存的变量名,你可以使用任何其他名字。file.read() 还可以使用下列任一个参数,只要用引号括起来放入括号里就可以。

引用:

*n - 读取一个数字并返回它。例:file.read("*n")

*a - 从当前位置读取整个文件。例:file.read("*a")

*l - (默认) - 读取下一行,在文件尾 (EOF) 处返回 nil。例:file.read("*l")

number - 返回一个指定字符个数的字符串,或在 EOF 时返回 nil。例:file.read(5)

既然我们已经读取到所要的那一行,我们需要关闭打开的文件,像这样:

代码:

file:close()

  现在要打印我们的文件至屏幕我们只要这么做:

代码:

screen:print(10,10,ourline,white)

读取所有行  

要读取一个文件的所有行,你可以在一个 for 语句中使用上述技巧。请看下述代码:

代码:

y = 10

file = io.open("testRead.txt","r")

for line in file:lines() do

     y = y + 10

     screen:print(100,y,line,white)

endf

ile:close()

  这个代码设置了一个起始值 y 用于打印,这样它可以在屏幕不同的纵坐标打印每一行。照例,先打开文件。然后是 for 语句,这句代码是说文件的行数有多少下面的代码就执行几次。我们的 y 坐标则每次循环加上 10 以便打印命令可以打印下一行。

写入文件(覆盖)

  写入文件的方式大致相同。下面的代码将覆盖任何先前写入文件的内容:

代码:

file = io.open("testRead.txt","w")file:write("hello")file:close()

  注意,我们这次使用了 w 模式,而不是 r 模式,因为我们是要写入而不是读取。我们用 file:write() 写入括号里作为参数的、用引号括起来的文本。你也可以用变量替代。如果你使用变量就不要用引号,请看下例:

代码:

file = io.open("testRead.txt","w")myText = "Hello"file:write(myText)file:close()

写入文件(附加)

  你可以使用附加模式,这样就可以在写入文件时将新内容附加在已有文本末尾,而不是删除原来的。做法与上面基本相同,除了模式换成“附加”之外。请看代码:

代码:

file = io.open("testRead.txt","a")myText = "\nHello"file:write(myText)file:close()

Lua读写文件的更多相关文章

  1. 利用Lua读写本地文件

    缘由 今天在使用Lua编写脚本时,需要用到读写文件的操作,很久没有使用Lua了,特写下此文来备忘一下. 简介 Lua对文件的操作与C对文件的操作基本一致,不管是参数还是方法.Lua中可以直接通过全局方 ...

  2. MySQL主从(MySQL proxy Lua读写分离设置,一主多从同步配置,分库分表方案)

    Mysql Proxy Lua读写分离设置 一.读写分离说明 读写分离(Read/Write Splitting),基本的原理是让主数据库处理事务性增.改.删操作(INSERT.UPDATE.DELE ...

  3. Hyper-V无法文件拖拽解决方案~~~这次用一个取巧的方法架设一个FTP来访问某个磁盘,并方便的读写文件

    异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983.html 服务器相关的知识点:http://www.cnblogs.com/dunitia ...

  4. 计算机程序的思维逻辑 (60) - 随机读写文件及其应用 - 实现一个简单的KV数据库

    57节介绍了字节流, 58节介绍了字符流,它们都是以流的方式读写文件,流的方式有几个限制: 要么读,要么写,不能同时读和写 不能随机读写,只能从头读到尾,且不能重复读,虽然通过缓冲可以实现部分重读,但 ...

  5. Python读写文件

    Python读写文件1.open使用open打开文件后一定要记得调用文件对象的close()方法.比如可以用try/finally语句来确保最后能关闭文件. file_object = open('t ...

  6. php中并发读写文件冲突的解决方案

    在这里提供4种高并发读写文件的方案,各有优点,可以根据自己的情况解决php并发读写文件冲突的问题. 对于日IP不高或者说并发数不是很大的应用,一般不用考虑这些!用一般的文件操作方法完全没有问题.但如果 ...

  7. C#读写文件的方法汇总_C#教程_脚本之家

    C#读写文件的方法汇总_C#教程_脚本之家 http://www.jb51.net/article/34936.htm

  8. Inno Setup 如何读写文件

    软件安装的实质就是拷贝,对于简单的打包当然不需要考虑修改某(配置)文件.通过inno修改文件的目的在于把安装时相关信息写入文件中,提供其它应用的读取,而这些信息也只能在安装时才能确定,比如安装用户选择 ...

  9. java使用IO读写文件总结

    每次用到IO的读写文件都老忘记写法,都要翻过往笔记,今天总结下,省的以后老忘.java读写文件的IO流分两大类,字节流和字符流,基类分别是字符:Reader和Writer:字节:InputStream ...

随机推荐

  1. RHAS Linux下架构Lotus Domino详解(附视频)

    此处下载操作视频:RHAS Linux下架构Lotus Domino 6.5视频教程      在rhas下架构Lotus Domino 汉化 650) this.width=650;" o ...

  2. mediawiki 的使用

    首先,程序里会先加载 includes/DefaultSettings.php,然后再加载 LocalSettings.php,这样定义一些权限.其中 DefaultSettings.php 是默认的 ...

  3. samba服务设置,Linux系统和Windows文件共享

    samba是一个工具套件,在Unix上实现SMB(Server Message Block)协议,或者称之为NETBIOS/LanManager协议.SMB协议通常是被windows系列用来实现磁盘和 ...

  4. 第三百三十一天 how can I 坚持

    今天加了一天班,好累,还没吃晚饭,回来只吃了个泡面. 晚上回来的路上,在群里聊的倒是很happy,快笑死我了,仲宫二少,哈哈. 弟弟过两天要去见面,多聊聊,该结婚来. 还有,中午吃的肯德基,不好吃,可 ...

  5. Hadoop Java开发实用快捷键收藏

    不断总结更新.... Alt  +  /    补全 Ctrl + T 打出结构 Ctrl + 2 ,再选择 Quick Assist - Assign to local variable  Ctrl ...

  6. HDU 2516 取石子游戏(FIB博弈)

    取石子游戏 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  7. List小结

    假设有两个List集合,找出集合中重复的部分: //检测listX和listY中的重复部分 //把X复制到Z避免循环同时操作X从而出现异常              itemX.ForEach(i = ...

  8. POJ2299Ultra-QuickSort (线段树和归并排序的解法)

    题目大意就是说帮你给一些(n个)乱序的数,让你求冒泡排序需要交换数的次数(n<=500000) 此题最初真不会做,我也只是在听了章爷的讲解后才慢慢明白过来的 首先介绍线段树的解法: 我们先将原数 ...

  9. java_web用户的自动登录模块的实现

    javaBean的代码 package bean; import java.io.Serializable; public class Admin implements Serializable{ / ...

  10. Windows7部署WordPress傻瓜式教程(IIS7.5+MySQL+PHP+WordPress)

    http://www.cnblogs.com/vengen/archive/2010/01/01/WordPressInstall.html