Perl | Abrindo e lendo um arquivo
Um filehandle é uma estrutura Perl interna que associa um arquivo físico a um nome. Todos os filehandles têm acesso de leitura / gravação, portanto, uma vez que o filehandle seja anexado a um arquivo, a leitura / gravação pode ser feita. No entanto, o modo no qual o identificador de arquivo é aberto deve ser especificado ao associar um identificador de arquivo.
A função Abrir é usada para abrir um novo arquivo ou um arquivo existente.
Sintaxe: abrir FILEHANDLE, VAR
Aqui FILEHANDLE é o identificador retornado pela função abrir e VAR é a expressão com o nome do arquivo e o modo de abertura do arquivo.
A tabela abaixo mostra os modos nos quais o arquivo pode ser aberto e acesso a várias operações.
Modo | Descrição |
---|---|
r ou < | Acesso somente leitura |
w ou> | Cria, grava e trunca |
a ou >> | Grava, acrescenta e cria |
r + ou + < | Lê e escreve |
w + ou +> | Lê, escreve, cria e trunca |
a + ou + >> | Lê, escreve, acrescenta e cria |
Depois que um FILEHANDLE é atribuído a um arquivo, várias operações como leitura, gravação e anexação podem ser feitas. Existem várias maneiras diferentes de ler um arquivo.
- Usando um Operador de Manipulação de Arquivo
- Usando a função getc
- Usando a função de leitura
- O Operador FileHandle
O principal método de leitura das informações de um filehandle aberto é usando o operador <> . Quando o operador <> é usado em um contexto de lista, ele retorna uma lista de linhas do filehandle especificado. O exemplo abaixo lê uma linha do arquivo e a armazena no escalar.Deixe que o conteúdo do arquivo “GFG.txt” seja o seguinte:
GeeksforGeeks Ola geek Geek uma revolução Geeks são os melhores
Exemplo: GFG.pl
# Opening the file
open
(fh,
"GFG.txt"
) or
die
"File '$filename' can't be opened"
;
# Reading First line from the file
$firstline
= <fh>;
print
"$firstline\n"
;
Saída :
- Função getc
A função getc retorna um único caractere do FILEHANDLE especificado ou STDIN se nenhum for especificadoSintaxe: getc FILEHANDLE
# 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"
;
Saída:
Se houver um erro ou o identificador de arquivo estiver no final do arquivo, ele retornará undef.
- Função de leitura
A função de leitura é usada para ler dados binários de um arquivo usando filehandle.Sintaxe
ler FILEHANDLE, SCALAR, LENGTH, OFFSET
ler FILEHANDLE, SCALAR, LENGTHAqui, LENGTH representa o comprimento dos dados a serem lidos e os dados são colocados no início de SCALAR se nenhum OFFSET for especificado. Caso contrário, os dados são colocados após os bytes de OFFSET em SCALAR. No sucesso da leitura do arquivo, a função retorna o número de bytes lidos, zero no final do arquivo ou undef se houver um erro.
Lendo várias linhas de uma vez
O exemplo mostrado abaixo lê o conteúdo do arquivo especificado por filehandle até atingir o final do arquivo (EOF).Exemplo: File.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
(<FH>)
{
# Printing one line at a time
print
$_
;
}
close
;
Saída :
Tratamento de exceções em arquivos
Existem duas maneiras pelas quais a exceção pode ser tratada- Lançar uma exceção se o arquivo não puder ser aberto
- Dê um aviso se o arquivo não puder ser aberto e continue executando
- Lance uma exceção
Quando o filehandle não pode ser atribuído a um ponteiro de arquivo válido naquele momento, o dado é executado imprimindo a mensagem e mata o programa atual.
Exemplo :# Initializing filename
$filename
=
'GFG1.txt'
;
# Prints an error and exits if file not found
open
(fh,
'<'
,
$filename
) or
die
"Couldn't Open file $filename"
;
Saída:
O código acima imprime um erro se o arquivo não for encontrado e sai do código.
- Dê um aviso
Quando o filehandle não pode ser atribuído a um ponteiro de arquivo válido, ele apenas imprime uma mensagem de aviso usando a função warn e continua em execução.
Exemplo :# Initializing filename
$filename
=
'GFG.txt'
;
# Opening a file and reading content
if
(
open
(fh,
'<'
,
$filename
))
{
while
(<fh>)
{
print
$_
;
}
}
# Executes if file not found
else
{
warn
"Couldn't Open a file $filename"
;
}
Saída:
As postagens do blog Acervo Lima te ajudaram? Nos ajude a manter o blog no ar!
Faça uma doação para manter o blog funcionando.
70% das doações são no valor de R$ 5,00...
Diógenes Lima da Silva