Euphoria - 文件 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?

打开和关闭文件

Euphoria 默认提供处理文件所需的基本方法。您可以使用以下方法执行大部分文件操作:

  • open()
  • close()
  • printf()
  • gets()
  • getc()

open 方法

在读取或写入文件之前,您必须使用 Euphoria 的内置 open() 方法打开它。此函数创建一个文件描述符,用于调用与其关联的其他支持方法。

语法

integer file_num = open(file_name, access_mode)

如果打开给定文件名时出错,则上述方法返回 -1。以下是参数:

  • file_name - file_name 参数是一个字符串值,包含要访问的文件的名称。

  • access_mode - access_mode 确定打开文件的模式。例如,读取、写入追加等。下表列出了文件打开模式的所有可能值:

序号 模式和描述
1

r

以只读方式打开文本文件。文件指针放置在文件开头。

2

rb

以二进制格式只读方式打开文件。文件指针放置在文件开头。

3

w

以只写方式打开文本文件。如果文件存在,则覆盖文件。如果文件不存在,则创建一个新文件以进行写入。

4

wb

以二进制格式只写方式打开文件。如果文件存在,则覆盖文件。如果文件不存在,则创建一个新文件以进行写入。

5

u

打开一个文件进行读写。文件指针设置在文件开头。

6

ub

以二进制格式打开一个文件进行读写。文件指针放置在文件开头。

7

a

打开一个文件进行追加。如果文件存在,则文件指针位于文件末尾(追加模式)。如果文件不存在,则创建一个新文件以进行写入。

8

ab

以二进制格式打开一个文件进行追加。如果文件存在,则文件指针位于文件末尾(追加模式)。如果文件不存在,则创建一个新文件以进行写入。

示例

以下示例在 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

close() 方法

close() 方法刷新任何未写入的信息并关闭文件,此后无法再对文件进行读取或写入。

当文件的引用对象重新分配给另一个文件时,Euphoria 会自动关闭该文件。最好使用 close() 方法关闭文件。

语法

close( file_num );

这里将打开文件时接收到的文件描述符作为参数传递。

示例

以下示例创建文件(如上所述),然后在退出程序之前关闭它:

#!/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

读取和写入文件

Euphoria 提供了一组访问方法,使我们在读取或写入文本模式或二进制模式文件时更加轻松。让我们看看如何使用 printf()gets() 方法来读取和写入文件。

printf() 方法

printf() 方法将任何字符串写入打开的文件。

语法

printf(fn, st, x) 

以下是参数:

  • fn - 从 open() 方法接收的文件描述符。

  • st - 格式字符串,其中十进制或原子使用 %d 格式化,字符串或序列使用 %s 格式化。

  • x - 如果 x 是一个序列,则 st 中的格式说明符与 x 的相应元素匹配。如果 x 是一个原子,则通常 st 只包含一个格式说明符,并将其应用于 x。但是,如果 st 包含多个格式说明符,则每个说明符都应用于相同的值 x。

示例

以下示例打开一个文件,并将一个人的姓名和年龄写入该文件:

#!/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

gets() 方法

gets() 方法从打开的文件中读取字符串。

语法

gets(file_num)

这里传递的参数是 opend() 方法返回的文件描述。此方法从文件开头的每一行开始读取。字符的值从 0 到 255。在文件末尾返回原子 -1。

示例

让我们以一个已经创建的文件 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 库例程 中。

广告