Os comandos File and Folder, que apareceram em 4D v17 R5, permitem gerir pastas e ficheiros em disco de uma forma moderna e eficiente.
Quando se trata de escrever e ler, as funções setText e getText estão à sua disposição para ler ou escrever a totalidade do conteúdo. Mas o que fazer se quiser ler ou acrescentar uma ou mais linhas a um documento existente? Isto pode ser feito mais facilmente do que nunca utilizando os novos objectos “file handles” que aparecem no 4D v19 R7.
Continue a ler para mais detalhes!
HDI Utilizar as pegas de ficheiro
O que são os File handles?
Os File handles são objectos criados com base em objectos “File” e têm funções para aceder a qualquer parte dos documentos e, a partir daí, para ler ou escrever sequencialmente o seu conteúdo.
Mesmo que, no caso geral, se leia do princípio ao fim, é possível definir com precisão a posição da “cabeça de leitura”.
Da mesma forma, quando se pretende abrir um documento para escrever novas informações, geralmente é no final do documento que se pretende escrever. Pode-se posicionar a “cabeça de leitura” onde se quiser.
Mas não é tudo!
A característica principal e mais significativa do tratamento de ficheiros é que evitará abrir e fechar documentos que são uma operação que consome muito tempo. E a melhor maneira de pensar é fechar o ficheiro por programação, já não é obrigatório. Assim que o ficheiro tratado não for referenciado em qualquer parte do seu código, o ficheiro será fechado automaticamente! Esta é a razão pela qual, como veremos mais tarde, nenhuma função .close() é necessária!
Vamos mergulhar numa amostra rápida
O objectivo é adicionar linhas a um ficheiro de registo. Vamos criar uma classe chamada Logger e uma função chamada writeLine e ver como chamá-la!
Class constructor($logName : Text)
var $file : 4D.File
$file:=File("/LOGS/"+$logName)
$file.parent.create() // check that parent folder exists; Otherwise it will be created.
This.fh:=$file.open("append")
Function writeLine($logText : Text)
This.fh.writeLine($logText)
Uma vez criada esta classe, chamemos-lhe !
var $logger : cs.Logger
var $logName : Text
$logName:=Replace string(Timestamp; ":"; "-")+".txt"
$logger:=cs.Logger.new($logName)
For ($i; 1; 10)
$logger.writeLine("test_"+String(Random))
End for
Nesta altura, poderíamos fechar o ficheiro colocando o objecto $logger em NULL, mas não é obrigatório ! No fim deste código, o $logger (e o seu atributo .fh) será NULL, por isso o ficheiro será fechado!
Atributos e funções
Nova função de ficheiro:
A primeira função, open(), é uma nova função de File que permite criar o cabo. O cabo pode ser criado em modo de leitura, modo de escrita ou modo de anexação.
$handle:=$file.open("write")
Também pode utilizar um objecto como parâmetro se precisar de especificar o charset, os delimitadores de leitura ou de escrita.
$o:=New object()
$o.mode:="append"
$o.charset:="UTF-8"
$o.breakModeRead:=Document with CRLF
$o.breakModeWrite:=Document with CRLF
$handle:=$file.open($o)
Uma vez criado o cabo, mais atributos e funções estarão disponíveis:
Mais dois Atributos úteis do Manípulo
- .offset é a compensação actual do fluxo de dados (posição dentro do documento)
- Este atributo pode ser escrito. Utilize-o apenas se precisar de definir a posição de leitura ou escrita num local específico. Basta lembrar que os seus valores mudam automaticamente após uma operação de leitura ou de escrita.
- .eof é falso desde que o fim do documento não seja alcançado.
O atributo .eof permite navegar num ficheiro de uma forma muito elegante
$fileHandle:=$file.open("read")
While (Not($fileHandle.eof)) // eof = end of file
$text:=$fileHandle.readLine()
//…
End while
manejar Funções
A classe de puxadores vem com muitas funções que permitem:
- Ler e escrever texto
- Leitura e escrita de linhas (com gestão automática de quebras de linha)
- Obter e definir o tamanho de um documento
- Ler e escrever Blobs!
Para onde ir a partir daqui?
Encontre mais detalhes sobre o centro de documentação. E sinta-se à vontade para nos contactar nos fóruns 4D; teremos todo o prazer em ajudar.