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") # => 24Arquivo 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
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.
ResponderExcluirExemplo:
file = Pathname.new("path/to/file.ext")
file.readlines # lê o arquivo assim como File.readlines(file)
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”!
ResponderExcluirComparando 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!