NuGuN Posted January 1, 2007 at 06:35 PM Report #73846 Posted January 1, 2007 at 06:35 PM O que vou aqui explicar é o básico para trabalhar com ficheiros em VB6. Ler/Escrever em ficheiros de texto Ler/Escrever em ficheiros binários Apagar Ficheiros Renomear Ficheiros Verificar a Existência de um determinado Ficheiro Ficheiros de Texto Ler Dim strFicheiro As String Open "dir ficheiro" For Input As #1 Line Input #1, strFicheiro Close #1 "dir ficheiro" -> directório do ficheiro que se pretende abrir For Input -> indica que vamos abrir o ficheiro apenas para leitura #1 -> é como um identificador para o ficheiro Line Input #1, strFicheiro -> carrega a informação para dentro da variável strFicheiro Close #1 -> Ao abrir o ficheiro este fica a ser utilizado pelo programa e não é possível apaga-lo enquanto não for fechado no programa o ficheiro O código a cima lê a primeira linha de um ficheiro de texto e carrega essa informação para a variável strFicheiro. A cada vez que se executa a linha Line Input #1, strFicheiro será lida a linha seguinte. Se quisermos ler apenas as 2 primeiras linhas de um ficheiro de texto podemos colocar duas linhas Line Input #1, strFicheiro seguidas: Dim strFicheiro As String Dim temp As String Open "dir ficheiro" For Input As #1 Line Input #1, temp strFicheiro = temp Line Input #1, temp strFicheiro = strFicheiro & temp Close #1 Ao tentarmos ler uma linha inexistente ou seja, se no ficheiro de texto não existir mais linhas para ler e se tentarmos ler mais linhas irá dar erro. Não esquecer que uma linha em branco é diferente de uma linha inexistente. Este método serve se quisermos apenas ler 1, 2 ou 3 linhas mas, se quisermos ler um ficheiro de texto completo com por exemplo 100 linhas não vamos repetir 100 vezes a mesma linha de código. Para contornar este problema utilizamos um ciclo while: Open "dir ficheiro" For Input As #1 While EOF(1) Line Input #1, temp strFicheiro = strFicheiro & temp Loop Close #1 While EOF(1) -> inicio do ciclo while. EOF ou End Of File (em português "Fim Do Ficheiro") ou seja, repete o ciclo enquanto não chegar ao fim do ficheiro de texto. O 1(um) da linha EOF(1) não tem a função de indicar se a expressão é verdadeira ou falsa. Indica que o ciclo vai acabar quando chegar ao fim do ficheiro 1, porque abrimos o ficheiro com o marcador 1 (Open "dir ficheiro" For Input As #1). Não é obrigatório ser sempre utilizado o numero 1. Se quisermos ler 2 ficheiro e não os fechar imediatamente a seguir a termos lido a informação, teremos de mudar de marcador para os diferentes ficheiros. Se por exemplo não tivesse fechado o ficheiro com o marcador 1 e quisesse abrir outro ficheiro para ler ou escrever teria de utilizar outro marcador em vez do 1: Open "dir ficheiro" For Input As #2 Line Input #2, strFicheiro Close #2 Quando falo em "não fechar um ficheiro" refiro-me a não utilizar a linha Close #2, e enquanto não a utilizar este ficheiro ira estar a a ser utilizado pelo programa. Isto serve para um ficheiro que é utilizado várias vezes durante a execução de um programa. Como é utilizado várias vezes, o ficheiro é aberto por exemplo no evento Form_Load e não mais é fechado ate o programa terminar. Isto evita que para ler ou escrever no ficheiro tenhamos que andar sempre a escrever todo aquele código. Assim se o ficheiro estiver aberto basta a linha Line Input #2, strFicheiro. Escrever Open "dir ficheiro" For Output As #1 Print #1, strFicheiro 'ou Write #1, strFicheiro Close #1 For Output -> indica que vamos abrir um ficheiro para escrita Print #1, strFicheiro -> Escreve no ficheiro de texto o que estiver na variável strFicheiro Write #1, strFicheiro -> Escreve no ficheiro de texto o que estiver na variável strFicheiro, com a diferença de colocar entre aspas o que escreve. Imaginemos que a variável continha a string Frase Teste, esta string seria passada para o ficheiro de texto assim -> "Frase Teste" O código acima serve para escrevermos num ficheiro de texto. Ao abrirmos o ficheiro com a linha Open "dir ficheiro" For Output As #1 ele criará o ficheiro caso ele não exista ou, caso exista o que estiver dentro dele será eliminado e ficará em branco. Open "dir ficheiro" For Append As #1 Print #1, strFicheiro 'ou Write #1, strFicheiro Close #1 Este código serve para escrever em ficheiro de texto como o anterior com a diferença de dar para adicionar texto a ficheiros já existentes e com informação. Com este código acrescenta-se no final do ficheiro a informação desejada. A nível de código a diferença esta no modo com que se abre o ficheiro (For Append) Ficheiros Binários Ler Dim strFicheiro() As Byte Dim iFreeFile As Long iFreeFile = FreeFile ReDim strFicheiro(tamanho_ficheiro) Open "dir ficheiro" For Binary Access Read As #iFreeFile Get #iFreeFile, 1, strFicheiro Close #iFreeFile iFreeFile = FreeFile -> para ficheiro binários, antes de abrirmos o ficheiro temos de reservar espaço em memória para o armazenar ReDim strFicheiro(5) -> redimensiona a variável com o tamanho do ficheiro a abrir Get #iFreeFile, 1, strFicheiro -> coloca-se o conteúdo do ficheiro na variável strFicheiro. O "1" indica em que posição começar a ler o ficheiro. Este metodo de ler ficheiro binários é mais utilizada para ser ter um maior controlo pois o programador pode escolher partes do ficheiro que queria carregar, em vez de carregar o ficheiro completo uma vez que define o tamanho da variável e o ponto de inicio de leitura. Dim strFicheiro As String Dim iFreeFile As Long iFreeFile = FreeFile Open "dir ficheiro" For Binary Access Read As #iFreeFile strFicheiro = Input(LOF(iFreeFile), iFreeFile) Close #iFreeFile strFicheiro = Input(LOF(iFreeFile), iFreeFile) -> carrega-se o ficheiro para a variável strFicheiro como tamanho que se desejar. LOF() ou Lenght Of File que significa comprimento/tamanho do ficheiro, essa função retorna o tamanho do ficheiro. Se por exemplo se quizer apenas carregar os primeiros 8 bytes do ficheiro troca-se LOF(iFreeFile) por 8 e seriam apenas os primeiros 8 bytes carregados para a variável strFicheiro. Escrever Dim strFicheiro As String Dim iFreeFile As Long iFreeFile = FreeFile strFicheiro = "string teste" Open "dir ficheiro" For Binary Access Write As #iFreeFile Put #iFreeFile, 1, strFicheiro Close #iFreeFile Com este código escreve-se para um ficheiro binário. O "1" indica onde se deve começar a escrever no ficheiro. Se por exemplo o programador colocar "1" como esta acima e se existir informação nesse ficheiro, essa informação será substituída, exemplo: Antes: "1234567" Escreve-se no ficheiro a string "teste" com a linha -> Put #iFreeFile, 1, strFicheiro Depois: "teste67" Se quiser inserir no fim do ficheiro basta trocar o numero por LOF(iFreeFile), ficando assim: Put #iFreeFile, LOF(iFreeFile), strFicheiro Como por vezes é necessário ler e escrever para um ficheiro em simultâneo, não dá muito geito andar a abrir o ficheiro em modo de leitura, abrir o ficheiro em modo escrita e sempre assim... por isso pode-se fazer o seguinte: Dim strFicheiro As String Dim varLeitura() As Byte Dim iFreeFile As Long iFreeFile = FreeFile strFicheiro = "string teste" ReDim varLeitura(tamanho_ficheiro) Open "dir ficheiro" For Binary As #iFreeFile Put #iFreeFile, 1, strFicheiro Get #iFreeFile, 1, varLeitura Close #iFreeFile Basta retirar Binary Access Write ou Binary Access Read, e assim pode-se ler e/ou escrever. Apagar Ficheiros Kill "dir ficheiro" bem.. não ha muito a dizer sobre esta linha... quando se tenta apagar um ficheiro que não existe dá erro, portanto pode-se adicionar mais uma linha para evitar que dê erro e o consequente encerramento do processo: On Error Resume Next Kill "dir ficheiro" Renomear Ficheiros Name "nome_antigo" As "novo_nome" Tal como a linha anterior caso o ficheiro não exista pode ocorrer erro, por isso será melhor adicionar mais uma linha para evitar problemas.... Verificar a Existência de um determinado Ficheiro If Dir("dir ficheiro") = "nome_ficheiro" Then 'Codigo aqui End If Para evitar os erros falados nas duas linha de código anteriores, podemos utilizar este código a acompanha-las em vez do On Error Resume Next. Na minha opinião é uma forma mais "proficional" de o fazer. "dir ficheiro" será trocado pelo directório do ficheiro e o respectivo nome do ficheiro que se quer verificar a existência: "c:\teste.exe" "nome_ficheiro" será trocado por exemplo por teste.exe. Caso o ficheiro não exista a função Dir() não irá retornar nenhum valor, caso exista retorna o nome do ficheiro. NOTA Na minha opinião quando se esta a trabalhar com ficheiros nunca se sabe o que pode acontecer ou o que os utilizadores fazem, por isso aconselho a utilizarem sempre nas funções onde estão a trabalhar com ficheiros, que coloquem a linha de código On Error Resume Next E é tudo (pelo menos o que eu considero básico 😄 ). Alguma dúvida, já sabem.... não hesitem em perguntar 😉 Cumps
delimery Posted March 6, 2007 at 07:40 PM Report #86821 Posted March 6, 2007 at 07:40 PM Viva Supondo que eu quero criar um ficheiro de texto onde vá escrever dados relativos a uma pessoa. Esses dados estariam organizados por numero nome telefone cada um destes campo faz parte de uma estrutura. Quando abro o ficheiro em Random, se usar o Put #file, , estrutura A formataçao dos dados é esquesita, pois entre cada campo da estrutura é colocado um quadrado. Se abrir em Append posso imprimir campo a campo, mas um dos objectivos era verificar se o numero da pessoa já exisrte na linha. Em suma. se usar o random, há algumna maneira de imprimir os campos sem aquele quadrado e já agora é possivel percorrer o ficheirop á procura do numero? obrigado e desculpem...
NuGuN Posted March 6, 2007 at 11:26 PM Author Report #86877 Posted March 6, 2007 at 11:26 PM Boas. Eu não sei a origem da informação que guardas no ficheiro de texto, mas normalmente esses "quadradinhos" aparecem onde seria para estar um parágrafo, o equivalente a um "Enter", não sei se é o caso. Quando falas em Random, a que te referes? e já agora é possivel percorrer o ficheirop á procura do numero? Sim é 😉 Cumps
delimery Posted March 7, 2007 at 03:34 AM Report #86897 Posted March 7, 2007 at 03:34 AM Open "c:\bb.txt" For Random As #2 'Len = Len(rt) Put #2, , estrutura(1, 2) Close #2 Estrutura: Type tRec Id As String Channel As String End Type o resultado no ficheiro bb.txt é o seguinte [] 3 []Sensor Os dois campos que mandei imprimir tem o conteudo correcto, mas o raio dos quadrados é que nao estao lá a fazer nada. Tambem posso usar a abertura de ficheiro do tipo APPEND, mas aí nao consigo imprimir a estrutura toda de uma so vez e cada campo da estrutura fica numa linha diferente. O que eu queria era que dada a estrutura a info ficasse da seguinte maneira no txt Id__channel__[outra campos] 1 5 ..... 6 7 ..... não sei como fazer para que a info fique formatada assim
NuGuN Posted March 7, 2007 at 02:23 PM Author Report #86939 Posted March 7, 2007 at 02:23 PM Como já disse esses quadrados são devido a um paragrafo com um formato esquisito (não sei a razão). Então e se utilizares output em vez de Random? O ramdom nem sabia de exitir.... Atenção que ao abrires o ficheiro em modo output, o que esta no ficheiro desaparece.... Se queres que essa estrotura apareça em linha então tens de ver a origem dessa estrutura. Ele só por si não coloca esses parágrafos. Cumps
pbreda Posted August 25, 2007 at 10:13 AM Report #128137 Posted August 25, 2007 at 10:13 AM Boas, podiam me informar como abrir um ficheiro mas apartir do ficheiro e nao de um programa.... Cumprimentos Qualquer coisa esfrega a lampada!!!Visite Banco de Software e desfrute do software disponível xD
Tiago Salgado Posted August 26, 2007 at 10:51 AM Report #128404 Posted August 26, 2007 at 10:51 AM Boas, podiam me informar como abrir um ficheiro mas apartir do ficheiro e nao de um programa.... Cumprimentos Hum ? A partir de um ficheiro como ? Duplo clique nele e chamar a aplicação que o lê ?
pbreda Posted August 27, 2007 at 01:01 PM Report #128688 Posted August 27, 2007 at 01:01 PM Sim, é isso que pertendo saber.... cumprimentos Qualquer coisa esfrega a lampada!!!Visite Banco de Software e desfrute do software disponível xD
NuGuN Posted August 27, 2007 at 05:22 PM Author Report #128732 Posted August 27, 2007 at 05:22 PM Boas... Podees ver aqui nos programas anexos. Cumps
VidU Posted November 3, 2007 at 01:09 PM Report #144882 Posted November 3, 2007 at 01:09 PM Ola é o seguinte, tenho um ficheiro .txt ja com informaçao dentro dele, e ao mandar escrever mais informaçao ele vai subestituir as linhas, e perder a informaçao antiga.. ou seja eu preciso mesmo saber é como posso dizer para ele por exemplo começar a escrever na linha 4, em vez de começar a escrever no inicio, como pulo linhas sem as apagar?
NuGuN Posted November 3, 2007 at 01:26 PM Author Report #144883 Posted November 3, 2007 at 01:26 PM E que tal ler o tutorial 😄 Open "dir ficheiro" For Append As #1 Print #1, strFicheiro 'ou Write #1, strFicheiro Close #1 Este código serve para escrever em ficheiro de texto como o anterior com a diferença de dar para adicionar texto a ficheiros já existentes e com informação. Com este código acrescenta-se no final do ficheiro a informação desejada. A nível de código a diferença esta no modo com que se abre o ficheiro (For Append) Cumps
naoliveira Posted January 6, 2008 at 03:43 PM Report #158279 Posted January 6, 2008 at 03:43 PM Open "c:\bb.txt" For Random As #2 'Len = Len(rt) Put #2, , estrutura(1, 2) Close #2 Para leres do ficheiro no formato correcto usas Open "c:\bb.txt" For Random As #2 'Len = Len(rt) get #2, , estrutura(1, 2) ' só tens de "dizer" que queres o get em vez do put Close #2
negralince Posted January 11, 2013 at 12:32 PM Report #490762 Posted January 11, 2013 at 12:32 PM E como fazer para não repetir os dados do arquivo em txt para que ele só seja exibido uma vez . EX: num arquivo em txt, tem 5 paginas e quero que exiba somente uma vez a data q aparece nas 5 páginas??? Open "C:\ABONO09.txt" For Input As #1 Line Input #1, linha Do While Not EOF(1) 'ler até o final do arquivo If UCase(Mid(linha, 34, 11)) = "OCORRENCIAS" Then ' se na linha tiver a palavra ocorrencia então imprimi as data1 e data2 data1 = Mid(linha, 60, 8) data2 = Mid(linha, 71, 8) Print "Data: "; data1; " "; "à" & " "; data2; vbCrLf ' o caracter "&" substitui o ";" e o vbcrlf pula uma linha End If bjs hk
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now