📜  珀尔 |打开和读取文件

📅  最后修改于: 2022-05-13 01:54:41.725000             🧑  作者: Mango

珀尔 |打开和读取文件

文件句柄是一种内部 Perl 结构,它将物理文件与名称相关联。所有文件句柄都具有读/写访问权限,因此一旦将文件句柄附加到文件读/写就可以完成。但是,在关联文件句柄时要指定打开文件句柄的模式。

打开文件


打开函数用于打开一个新文件或一个现有文件。

这里 FILEHANDLE 是 open函数返回的句柄, VAR 是具有文件名和打开文件模式的表达式。
下表显示了可以打开文件和访问各种操作的模式。

ModeDescription
r or <Read Only Access
w or >Creates, Writes, and Truncates
a or >>Writes, Appends, and Creates
r+ or +<Reads and Writes
w+ or +>Reads, Writes, Creates, and Truncates
a+ or +>>Reads, Writes, Appends, and Creates


读取文件


一旦为 FILEHANDLE 分配了一个文件,就可以进行各种操作,如读、写和追加。有许多不同的方式来读取文件。

  • 使用文件句柄运算符
  • 使用 getc函数
  • 使用读取函数
  • 文件句柄运算符
    从打开的文件句柄中读取信息的主要方法是使用运算符< > 。在列表上下文中使用 < >运算符时,它会从指定的文件句柄返回行列表。下面的示例从文件中读取一行并将其存储在标量中。

    让文件“GFG.txt”的内容如下:

    GeeksforGeeks
    Hello Geek
    Geek a revolution
    Geeks are the best
    

    示例:GFG.pl

    # Opening the file 
    open(fh, "GFG.txt") or die "File '$filename' can't be opened";
      
    # Reading First line from the file
    $firstline = ;
    print "$firstline\n";
    

    输出 :

  • getc函数
    getc函数从指定的 FILEHANDLE 返回单个字符,如果未指定则返回 STDIN
    # Opening the file 
    open(fh, "GFG.txt") or die "File '$filename' can't be opened";
       
    # Reading First char from the file
    $firstchar = getc(fh);
    print "$firstchar\n";
    

    输出:

    如果出现错误或文件句柄位于文件末尾,则返回 undef。

  • 读取函数
    read函数用于使用文件句柄从文件中读取二进制数据。

    这里,LENGTH 表示要读取的数据的长度,如果没有指定 OFFSET,则数据放在 SCALAR 的开头。否则,数据将放在 SCALAR 中的偏移字节之后。文件读取成功时,函数返回读取的字节数,文件末尾为零,如果有错误,则返回 undef。

    一次读取多行


    下面显示的示例读取文件句柄指定的文件内容,直到到达文件结束(EOF)。

    示例:文件.pl

    # Opening the file
    open(FH, "GFG.txt")or die "Sorry!! couldn't open";
    print "Reading file \n";
      
    # Reading the file till FH reaches EOF
    while()
    {
        # Printing one line at a time
        print $_;
    }
    close;
    

    输出 :

    文件中的异常处理


    异常处理有两种方式

    • 如果文件无法打开,则抛出异常
    • 如果文件无法打开并继续运行,则发出警告
    • 抛出异常
      当当时无法为文件句柄分配有效的文件指针时,将执行 die 打印消息并终止当前程序。
      例子 :
      # Initializing filename 
      $filename = 'GFG1.txt';
        
      # Prints an error and exits if file not found
      open(fh, '<', $filename) or die "Couldn't Open file $filename";
      

      输出:

      如果找不到文件并从代码中退出,上面的代码会打印错误。

    • 示警
      当文件句柄无法分配有效的文件指针时,它只会使用警告函数打印警告消息并继续运行。
      例子 :
      # Initializing filename
      $filename = 'GFG.txt';
      # Opening a file and reading content
      if(open(fh, '<', $filename))
      {
          while()
          {
              print $_;
          }
      }
        
      # Executes if file not found
      else
      {
        warn "Couldn't Open a file $filename";
      }
      

      输出: