Desculpe, seu navegador não suporta JavaScript! Casa Open: Arquivos em Ruby

Arquivos em Ruby

O Ruby tem um modo muito fácil para manipular arquivos. Aqui vamos ver os principais métodos para manipular arquivos de texto plano.
 
Abrindo arquivos
arq = File.new("arquivo.txt", "modo_de_abertura") # abri o arquivo em modo "modo_de_abertura"
Modos de abertura: 
r Abre o arquivo para leitura.
w Abre o arquivo para escrita.
a Anexa ao final do arquivo. Caso você queira escrever no final do arquivo.
r+ Abre o arquivo para leitura e escrita.
w+ Cria um arquivo vazio para leitura e escrita.
a+ Abre o arquivo para leitura e anexação. Ou seja, você pode ler qualquer parte do arquivo mas só pode escrever no final do arquivo
Lendo arquivos

a = File.readlines("arquivo.txt") => ["Blog sobre Ruby on Rails.\n", "\n", "Possui tutoriais, dicas, criticas e muito mais sobre o framework mais comentado da atualidade!\n"]
Como pode ser visto, este código devolve um vetor possuindo em cada elemento uma linha do arquivo. 
 
Lendo os caracteres do arquivo 

Lendo caractere por caractere do arquivo:

arq = File.open("arquivo.txt")
arq.getc.chr #=> "B"
arq.getc.chr #=> "l"
arq.getc.chr #=> "o"
arq.getc.chr #=> "g"
arq.getc.chr #=> " "

Escrevendo em arquivos
arq = File.new("arquivo.txt", "w") # abri o arquivo em modo de escrita
arq.write "Rails Open" # escreve no arquivo e retorna quantos caracters exitem neste
arq.puts " - Ruby on Rails" # escreve no arquivo
arq.close unless file.closed? # se o arquivo não foi fechado: fechamos
O "unless file.closed?" foi colocado apenas para demostrar o método "close?". Bastava o "arq.close" que funcionaria normalmente.

Renomeando arquivos

File.rename("arquivo.txt", "arquivo_novo.txt")


Descobrindo a extensão do arquivo 

extensao = File.extname("arquivo_novo.txt") # => ".txt"

Informações sobre o arquivo

Arquivo existe ?

File.exists?("arquivo_novo.txt") #=> true
Pertence a determinado diretório?  
File.directory?("/home/samuelvinicius") # => true

Tamanho do arquivo em bytes 
File.size("arquivo_novo.txt") # => 24
Arquivo vazio?
File.zero?("arquivo_novo.txt") #=> false 
Data de criação, ultima modificação e ultimo acesso ao arquivo
File.ctime("arquivo_novo.txt") #=> Tue Jan 26 16:20:36 -0300 2010
File.mtime("arquivo_novo.txt") #=> Tue Jan 26 16:27:41 -0300 2010
File.atime("arquivo_novo.txt") #=> Tue Jan 26 16:27:42 -0300 2010 
 

Posiciona em um ponto do arquivo
arq = File.open('local_filename', 'r') # abri o arquivo em modo de leitura
arq.seek(2, IO::SEEK_SET)  # aponta pra o byte 2 do arquivo
puts f.readline # imprime os caracteres da linha a partir do byte 2

fonte: http://www.techotopia.com/index.php/Working_with_Files_in_Ruby

2 comentários:

  1. Muito bom. Faça um estudo sobre a classe `Pathname`. Essa classe implementa todas as operações da classe `File` e do módulo `FileUtils` para as suas instâncias.

    Exemplo:

    file = Pathname.new("path/to/file.ext")
    file.readlines # lê o arquivo assim como File.readlines(file)

    ResponderExcluir
  2. A classe “Pathname” é muito boa! Ela possui todas as funcionalidades das classe “File”, algumas da classe “Dir”, algumas do módulo “FileTeste” e todas do módulo “FileUtils”!

    Comparando com a classe “File” a maior diferença é que ela trabalha com um path que pode ou não ser um arquivo. Já a “File” trabalha com arquivos.

    Lembrando... usando:
    require 'ftools'
    os métodos para copiar, mover, apagar e comparar arquivos são acrescentados a classe “File”!

    Mas sem duvida a “Pathaname” é mais completa!

    ResponderExcluir

Casa Open | by Samuel Vinícius, Belo Horizonte - MG. Powered by Blogger