acrbasic Level: Guest

|
Re: Arquivo Sequencial - Como faço para ler um arquivo sequencial com mais de 32.767 bytes Archived to Disk
Uma solução é ler 32K bytes do arquivo de cada vez e fazer o processamento desejado, até o fim do arquivo:
Function ProcessaArquivo (ByVal Nome$) As Long
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'
' Esta função lê um arquivo de qualquer tamanho no modo binário e faz um processamento
' desejado.
' Caso o arquivo tenha mais de 32768 bytes, serão lidos 32768 bytes de cada vez.
' Em sistemas de 16 bits o poderia haver uma limitação dessa ordem.
'
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim Arq%, Tamanho&, ErroAnterior%, i%, Inteiro&, Parte&, Início&, x&, Temp$
' Abre o arquivo
Arq = FreeFile
Open Nome For Binary As #Arq
' A variável temporária 'temp$' armazenará o arquivo ou parte dele
Tamanho = LOF(Arq)
If Tamanho > 32768 Then Tamanho = 32768
' Tentamos fazer a variável temporária do maior tamanho possível
ErroAnterior = -1
Do While ErroAnterior <> 0
On Error Resume Next
Temp$ = Space$(Tamanho)
ErroAnterior = Err
On Error GoTo 0
Tamanho = Tamanho / 2
Loop
Tamanho = Len(Temp$)
' Determina quantas leituras inteiras serão feitas
Inteiro& = LOF(Arq) Tamanho
' Determina o tamanho da última leitura a ser feita (bytes no fim do arquivo)
Parte& = LOF(Arq) Mod Tamanho
' Laço de leitura do arquivo
Início& = 1
If Parte > 0 Then Inteiro = Inteiro + 1
For x& = 1 To Inteiro&
If x = Inteiro And Parte > 0 Then
Temp$ = Left$(Temp$, Parte)
End If
Get #Arq, Início&, Temp$
'Faça aqui o processamento desejado ...
'
'...
'
'......................................
Início& = Início& + Tamanho
DoEvents
Next
Close #Arq
End Function
|