Files I/O
使用Euphoria编程语言,您可以编写读取和更改软盘驱动器或硬盘驱动器上的文件数据的程序,或者创建新文件作为输出形式。 您甚至可以访问计算机上的设备,例如打印机和调制解调器。
本章介绍了Euphoria中可用的所有基本I/O功能。 有关更多功能的信息,请参阅标准的Euphoria文档。
在屏幕上显示
生成输出的最简单方法是使用puts()语句,您可以在其中传递要在屏幕上显示的任何字符串。 还有另一种方法printf() ,如果必须使用动态值格式化字符串,也可以使用它。
这些方法将传递它们的表达式转换为字符串,并将结果写入标准输出,如下所示 -
#!/home/euphoria-4.0b2/bin/eui
puts(1, "Euphoria is really a great language, isn't it?" )
这会在您的标准屏幕上产生以下结果 -
Euphoria is really a great language, isn't it?
打开和关闭文件 (Opening and Closing Files)
Euphoria提供了默认操作文件所需的基本方法。 您可以使用以下方法完成大部分文件操作 -
- open()
- close()
- printf()
- gets()
- getc()
open方法
在您可以读取或写入文件之前,必须使用Euphoria的内置open()方法打开它。 此函数创建一个文件描述符,用于调用与之关联的其他支持方法。
语法 (Syntax)
integer file_num = open(file_name, access_mode)
如果打开给定文件名时出错,则上面的方法返回-1。 这是参数 -
file_name - file_name参数是一个字符串值,其中包含要访问的文件的名称。
access_mode - access_mode确定必须打开文件的模式。 例如,读取,写入附加等。文件打开模式的可能值的完整列表如下表所示 -
S.No | 模式和描述 |
---|---|
1 | r 打开文本文件以供阅读。 文件指针位于文件的开头。 |
2 | rb 打开文件以仅以二进制格式读取。 文件指针位于文件的开头。 |
3 | w 打开文本文件以进行写入。 如果文件存在,则覆盖文件。 如果该文件不存在,则创建一个用于写入的新文件。 |
4 | wb 打开文件以仅以二进制格式写入。 如果文件存在,则覆盖文件。 如果该文件不存在,则创建一个用于写入的新文件。 |
5 | u 打开文件进行读写。 文件指针设置在文件的开头。 |
6 | ub 打开二进制格式的读写文件。 文件指针位于文件的开头。 |
7 | a 打开要附加的文件。 如果文件存在,则文件指针位于文件的末尾(追加模式)。 如果该文件不存在,则会创建一个用于写入的新文件。 |
8 | ab 打开文件以二进制格式附加。 如果文件存在,则文件指针位于文件的末尾(追加模式)。 如果该文件不存在,则会创建一个用于写入的新文件。 |
例子 (Example)
以下示例在Linux系统的当前目录中创建一个新的文本文件 -
#!/home/euphoria-4.0b2/bin/eui
integer file_num
constant ERROR = 2
constant STDOUT = 1
file_num = open("myfile,txt", "w")
if file_num = -1 then
puts(ERROR, "couldn't open myfile\n")
else
puts(STDOUT, "File opend successfully\n")
end if
如果文件成功打开,则在当前目录中创建“myfile.txt”并生成以下结果 -
File opend successfully
The close() Method
close()方法刷新任何未写入的信息并关闭文件,之后不再对文件进行读写操作。
当文件的引用对象被重新分配给另一个文件时,Euphoria会自动关闭文件。 使用close()方法关闭文件是一种很好的做法。
语法 (Syntax)
close( file_num );
这里打开文件时收到的文件描述符作为参数传递。
例子 (Example)
以下示例如上所述创建文件,然后在存在程序之前将其关闭 -
#!/home/euphoria-4.0b2/bin/eui
integer file_num
constant ERROR = 2
constant STDOUT = 1
file_num = open("myfile.txt", "w")
if file_num = -1 then
puts(ERROR, "couldn't open myfile\n")
else
puts(STDOUT, "File opend successfully\n")
end if
if file_num = -1 then
puts(ERROR, "No need to close the file\n")
else
close( file_num )
puts(STDOUT, "File closed successfully\n")
end if
这会产生以下结果 -
File opend successfully
File closed successfully
读写文件 (Reading and Writing Files)
Euphoria提供了一组访问方法,可以在文本模式或二进制模式下读取或写入文件时使我们的生活更轻松。 让我们看看如何使用printf()和gets()方法来读写文件。
The printf() Method
printf()方法将任何字符串写入打开的文件。
语法 (Syntax)
printf(fn, st, x)
这是参数 -
fn - 从open()方法接收的文件描述符。
st - 格式字符串,其中使用%d格式化十进制或原子,字符串或序列使用%s格式化。
x - 如果x是一个序列,则st中的格式说明符与x的相应元素匹配。 如果x是一个原子,那么通常st只包含一个格式说明符,它应用于x。 然而; 如果st包含多个格式说明符,则每个格式说明符都应用于相同的值x。
例子 (Example)
以下示例打开一个文件,并在此文件中写入人员的姓名和年龄 -
#!/home/euphoria-4.0b2/bin/eui
integer file_num
constant ERROR = 2
constant STDOUT = 1
file_num = open("myfile.txt", "w")
if file_num = -1 then
puts(ERROR, "couldn't open myfile\n")
else
puts(STDOUT, "File opend successfully\n")
end if
printf(file_num, "My name is %s and age is %d\n", {"Zara", 8})
if file_num = -1 then
puts(ERROR, "No need to close the file\n")
else
close( file_num )
puts(STDOUT, "File closed successfully\n")
end if
上面的示例创建了myfile.txt文件。 是否在该文件中写入内容并最终关闭。 如果您打开此文件,它将具有以下内容 -
My name is Zara and age is 8
The gets() Method
gets()方法从打开的文件中读取字符串。
语法 (Syntax)
gets(file_num)
这里传递的参数是opend()方法返回的文件描述。 此方法逐行开始从文件的开头读取。 字符的值从0到255.原子-1在文件末尾返回。
例子 (Example)
我们来一个已创建的文件myfile.txt 。
#!/home/euphoria-4.0b2/bin/eui
integer file_num
object line
constant ERROR = 2
constant STDOUT = 1
file_num = open("myfile.txt", "r")
if file_num = -1 then
puts(ERROR, "couldn't open myfile\n")
else
puts(STDOUT, "File opend successfully\n")
end if
line = gets(file_num)
printf( STDOUT, "Read content : %s\n", {line})
if file_num = -1 then
puts(ERROR, "No need to close the file\n")
else
close( file_num )
puts(STDOUT, "File closed successfully\n")
end if
这会产生以下结果 -
File opend successfully
Read content : My name is Zara and age is 8
File closed successfully
Euphoria提供了许多方法的列表,可以帮助您操作文件。 这些方法列在Euphoria Library Routines中 。