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 确定打开文件的模式。 例如,读取、写入附加等。下表给出了文件打开模式可能值的完整列表 −

S.No 模式和说明
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 库例程中列出了这些方法。