Visual Basic VII Ficheiros Sequenciais CFAC Concepção e Fabrico Assistidos por Computador João Manuel R. S. Tavares
Sumário 1) Criar Ficheiros Sequenciais; 2) Adicionar itens a Ficheiros Sequenciais; 3) Utilizar Ficheiros Sequenciais: Ordenar Ficheiros Sequenciais; Combinar (Juntar) Ficheiros Sequenciais; Interrupções de controlo do processamento. @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: VII - Ficheiros Sequenciais 2
O que é um Ficheiro? Uma colecção de dados relacionados armazenados em dispositivos rígidos; Dois tipos de ficheiros: ficheiros executáveis (de programas), ficheiros de texto (dados); Ficheiros de dados geralmente são constituídos por uma colecção de registos (records); Um registo é uma colecção (estrutura) de campos (fields). @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: VII - Ficheiros Sequenciais 3
Criar um Ficheiro Sequencial: 1) Escolher o nome do ficheiro; 2) Escolher um número de referência; 3) Abrir o ficheiro para escrita (Output); 4) Escrever no ficheiro; 5) Fechar o ficheiro. Notas: A função Kill "filename" apaga do dispositivo duro o ficheiro especificado; A função Name "filename1" "filename2" altera o nome do ficheiro de filename1 para filename2. @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: VII - Ficheiros Sequenciais 4
Exemplo: Private Sub cmdcreatefile_click() Dim name1 As String, name2 As String ' Demonstrar a utilização da declaracao Write # Open "PIONEER.TXT" For Output As #1 Write #1, "ENIAC" Write #1, 1946 Write #1, "ENIAC", 1946 name1 = "Eckert" name2 = "Mauchly" Write #1, 14 * 139, "J.P. " & name1, name2, "John" Close #1 End Sub Nome do Ficheiro Escrever no Ficheiro Fechar o Ficheiro Número de Referência @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: VII - Ficheiros Sequenciais 5
Adicionar Itens a um Ficheiro Sequencial Escolher um número n, de 1 a 255, de referência para o ficheiro; Abrir o ficheiro no modo acrescentar (Append); Escrever no fim do ficheiro com a declaração Write #n; Fechar o ficheiro. @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: VII - Ficheiros Sequenciais 6
Exemplo (Adicionar um elemento ao ficheiro BASEBALL1.TXT) Private Sub Form_Load() Open App.Path & "\BASEBALl.TXT" For Append As #1 End Sub Abrir o ficheiro no modo Append Private Sub cmdaddrec_click() Write #1, txtplayer.text, txttimes.text, txthits.text txtplayer.text = txttimes.text = txthits.text= txtplayer.setfocus End Sub Private Sub cmdquit_click() Close #1 End End Sub (App.Path retorna uma string com o caminho (path) na qual o programa está a ser executado.) @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: VII - Ficheiros Sequenciais 7
Ficheiro Sequencial Os diferentes modos de utilização de um ficheiro são: o Escrita (Output); o Saída (Input); o Acrescentar (Append). Um ficheiro não deve ser aberto ao mesmo tempo para dois modos diferentes. Nomes para os ficheiros: seguir as mesmas regras utilizadas para nomear os ficheiros dos programas. Exemplo: invest.bast e invest.dat @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: VII - Ficheiros Sequenciais 8
Apanhar e Tratar Erros (Error Trapping) O Visual Basic tem um mecanismo, designado por error-trapping, para tratar certos tipos de erros. Se um erro ocorre quando o mecanismo errortrapping está activo, duas coisas acontecem: 1. Um número de identificação é atribuído à propriedade Number de um objecto do tipo Err. 2. O programa salta para a rotina de tratamento do respectivo erro (errorhandling routine). @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: VII - Ficheiros Sequenciais 9
Para Activar o Mecanismo errortrapping num Procedimento Escrever na primeiro linha do procedimento: On Error GoTo ErrorHandler Escrever as declarações que o procedimento deverá conter. Terminar o procedimento escrevendo: Exit Sub ErrorHandler: error-handling routine Resume @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: VII - Ficheiros Sequenciais 10
Exemplo (uma rotina para tratar o erro resultante de uma divisão por zero) Private Sub cmddivide_click() On Error GoTo ErrorHandler Dim a As Single, b As Single, c As Single picresult.cls a = Val(InputBox("Enter the numerator.")) b = Val(InputBox("Enter the denominator.")) c = a / b picresult.print The result is = ; c Exit Sub @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: VII - Ficheiros Sequenciais 11
A Rotina de Tratamento do Erro ErrorHandler: Etiqueta de linha (Line Label) O erro de Divisao por zero: 11 If Err = 11 Then picresult.print "You tried to divide by 0, which is illegal" picresult.print "Try again. b=val(inputbox( Enter the denominator )) End If Resume End Sub (Escrita a seguir à declaração Exit Sub do procedimento.) @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: VII - Ficheiros Sequenciais 12
Valores para o Objecto Err Tipo de erro Valor de Err Índice fora da gama 9 Divisão por zero 11 Ficheiro não encontrado 53 Ficheiro já aberto 55 Disco cheio 61 Ficheiro já existe 68 Disco não apto 71 Se na rotina de tratamento do(s) erro(s) a palavra Resume é substituída por Resume Next o programa avança para a linha a imediatamente seguir à linha na qual ocorreu o erro. @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: VII - Ficheiros Sequenciais 13
Ordenar Ficheiros Sequenciais Os registos de um ficheiro sequencial podem ser ordenados por um qualquer campo através de uma primeira leitura dos dados para arrays paralelos, ordenamento destes vectores segundo o campo pretendido, e reescrita dos dados ordenados no ficheiro. @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: VII - Ficheiros Sequenciais 14
Combinar Dois Ficheiros Sequenciais Passos para combinar (juntar) dois ficheiros ordenados: 1. Abrir os dois ficheiros originais para leitura e um terceiro ficheiro para escrita. 2. Obter um item de cada ficheiro original. 3. Comparar e repetir até o final de um dos ficheiros: Se um dos itens procede o outro, escreve-lo no terceiro ficheiro e obter um novo item do ficheiro que o continha. Se os dois itens são idênticos, escrever um item no terceiro ficheiro e avançar para os próximos itens de cada ficheiro. 4. Escrever os itens remanescentes no terceiro ficheiro. 5. Fechar os três ficheiros. @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: VII - Ficheiros Sequenciais 15
Interrupções de Controlo do Processamento Quando se processa ficheiros sequenciais pode-se introduzir variáveis de controlo (control variables) para seguir a computação ou uma tarefa especifica. Cada mudança do valor de uma variável de controlo é designado por interrupção (break). @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: VII - Ficheiros Sequenciais 16
Erros Comuns Abrir o ficheiro no modo errado. Não utilizar a declaração Write todas as vezes necessárias para adicionar dados a um ficheiro. Não fechar o ficheiro. @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: VII - Ficheiros Sequenciais 17