A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

1 Exercício prático 7 Private Sub cmdExecutar_Click() If optLer Then frmLer.Show Else frmEscrever.Show End If End Sub Private Sub cmdSair_Click() End End.

Apresentações semelhantes


Apresentação em tema: "1 Exercício prático 7 Private Sub cmdExecutar_Click() If optLer Then frmLer.Show Else frmEscrever.Show End If End Sub Private Sub cmdSair_Click() End End."— Transcrição da apresentação:

1 1 Exercício prático 7 Private Sub cmdExecutar_Click() If optLer Then frmLer.Show Else frmEscrever.Show End If End Sub Private Sub cmdSair_Click() End End Sub

2 2 Exercício prático 7 Private Sub cmdEscrever_Click() Call escrever(Val(txtAX.Text), Val(txtAY.Text), Val(txtBX.Text), Val(txtBY.Text)) End Sub Private Sub cmdSair_Click() Unload frmEscrever End Sub

3 3 Exercício prático 7 Private Sub cmdCalcularDistancia_Click() Dim x As Double, y As Double, x1 As Double, y1 As Double Call ler(x, y, x1, y1) txtResultado.Text = distancia(x, y, x1, y1) End Sub Private Sub CmdSair_Click() Unload frmLer End Sub

4 4 Exercício prático 7 Modulo Public Sub escrever(x1 As Double, y1 As Double, x2 As Double, y2 As Double) Open "c:\ponto.txt" For Output As #1 Write #1, x1, y1, x2, y2 Close #1 End Sub Public Sub ler(x1 As Double, y1 As Double, x2 As Double, y2 As Double) Open "c:\ponto.txt" For Input As #1 Input #1, x1, y1, x2, y2 Close #1 End Sub Public Function distancia(x1 As Double, y1 As Double, x2 As Double, y2 As Double) As Double distancia = Sqr((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)) End Function

5 5 Exercício prático 7 O utilizador selecciona o ficheiro de trabalho Public Sub escrever(x1 As Double, y1 As Double, x2 As Double, y2 As Double) Open frmOperacoes.txtNome.Text For Output As #1 Write #1, x1, y1, x2, y2 Close #1 End Sub Public Sub ler(x1 As Double, y1 As Double, x2 As Double, y2 As Double) Open frmOperacoes.txtNome.Text For Input As #1 Input #1, x1, y1, x2, y2 Close #1 End Sub

6 6 Exercício prático 7.1 Alterar o trabalho anterior para: 1 - Guardar as distâncias num ficheiro distâncias 2 – Carregar as distâncias numa combo box a partir do ficheiro

7 7 Exercício prático 7.1 Private Sub cmdCalcularDistancia_Click() Call calcularDistancias(frmOperacoes.txtPontos.Text, frmOperacoes.txtDist.Text) End Sub

8 8 Exercício prático 7.1 Private Sub cmdCarregaCombo_Click() Dim dist As Double Open frmOperacoes.txtDist.Text For Input As #1 While Not EOF(1) Input #1, dist cboDistancias.AddItem dist Wend Close #1 End Sub

9 9 Exercício prático 7.1 Public Sub calcularDistancias(filePontos As String, fileDistancias As String) Dim x As Double, y As Double, x1 As Double, y1 As Double Open filePontos For Input As #1 Open fileDistancias For Append As #2 While Not EOF(1) Input #1, x, y, x1, y1 Write #2, distancia(x, y, x1, y1) Wend Close #1 Close #2 End Sub

10 10 Exercício prático 7.1 Public Sub escreverPontos(x1 As Double, y1 As Double, x2 As Double, y2 As Double) Open frmOperacoes.txtPontos.Text For Append As #1 Write #1, x1, y1, x2, y2 Close #1 End Sub

11 11 Tipos de dados definidos pelo utilizador Public Type ponto x As Double y As Double End Type Private Sub cmdDistancia_Click() Dim a As ponto, b As ponto a.x = Val(txtAX.Text) a.y = Val(txtAY.Text) b.x = Val(txtBX.Text) b.y = Val(txtBY.Text) txtResultado.Text = distancia(a, b) End Sub Public Function distancia(a As ponto, b As ponto) As Double distancia = Sqr((b.x - a.x) * (b.x - a.x) + (b.y - a.y) * (b.y - a.y)) End Function Por ser Public tem de ser definido num Modulo Registo

12 12 Ficheiros de acesso aleatório Os ficheiros deste tipo podem ser acedido por qualquer ordem A dimensão do record (registo) tem de ser exacto e perfeitamente conhecido Todos os componentes do registo têm de ter tipo definido No uso de string tem de ser definido o número de caracteres que a constituem Ex: Dim str as string * 10 A string str pode guardar 10 caracteres

13 13 Ficheiros de acesso aleatório Nos ficheiros aleatórios é possível escrever ou ler directamente numa determinada posição Abrir Ficheiro Open nomeFicheiro For Random As #n Len = Len(registo) Tipo de abertura Aleatória se existir abre-o se não existir cria-o Tamanho do registo Nº Ficheiro Len(registo) Retorna o número de bytes do registo

14 14 Se o número de registo não for especificado, é lido ou escrito o registo corrente Ficheiros de acesso aleatório Escrever no ficheiro Put #n, numeroRegisto, registo Ler do ficheiro Get #n, numeroRegisto, registo Ler Nº do Ficheiro Nº de ordem do registo a ser lido (long) Variável para onde vão ser lidos os dados Escrever Nº do Ficheiro Nº de ordem do registo a ser escrito (long) Variável de onde vão ser escritos os dados

15 15 Ficheiros de acesso aleatório Put #n,, registo Get #n,, registo É lido ou escrito o registo corrente Seek #n, numeroRegisto Posicionar o file pointer apontador do ficheiro Nº do ficheiro Número do registo que vai ser acedido Sempre que o comando GET é executado o apontador do ficheiro é incrementado uma posição

16 16 Ficheiros de acesso aleatório Seek (n) Nº do ficheiro Retorna o número do registo actual LOF(n) Nº do ficheiro Retorna o número de bytes do ficheiro

17 17 Ficheiros de acesso aleatório Calcular o número de registos de um ficheiro numeroDeRegistos = LOF(n) / Len(registo) Posicionar o apontador do ficheiro para escrever no fim Seek #n, (LOF(n) + Len(registo)) / Len(registo), registo ou Seek #n, LOF(n) / Len(registo) + 1, registo

18 18 Ficheiros de acesso aleatório Adição de um novo registo no final do ficheiro Open ficheiro For Random As #1 Len = Len(registo) Put #1, (LOF(1) + Len(registo)) / Len(registo), registo Close #1 REMOVER Não é possível reduzir o tamanho de um ficheiro de acesso aleatório. Uma vez que um registo é criado existirá para sempre. O espaço ocupado por um registo se pode ser modificado isto é pode ser reescrito parcial ou totalmente

19 19 Ficheiros de acesso aleatório Um registo que se pretenda remover pode ser classificado como vazio e ser ignorado na operação de leitura Um registo classificado como vazio pode ser reutilizado Em intervalos regulares de tempo os registos vazios podem ser removidos Como?

20 20 Ficheiros de acesso aleatório Remover registos classificados como vazios 1 - Criar um novo ficheiro 2 - Transferir do ficheiro velho para o novo todos os registos não vazios 3 – Apagar o ficheiro velhoKill nomeFicheiro Caminho completo 4 – Renomear o ficheiro novo com o nome do velho Mudar o nome Name nomeFicheiroActual As nomeNovoFicheiro Caminho completo


Carregar ppt "1 Exercício prático 7 Private Sub cmdExecutar_Click() If optLer Then frmLer.Show Else frmEscrever.Show End If End Sub Private Sub cmdSair_Click() End End."

Apresentações semelhantes


Anúncios Google