Läs och skriv till en textfil 2/2
Förord
När hanteringen för att addera poster är klart, börjar vi med att skriva en funktion för att kunna söka också- det är alltid viktigt att användaren kan finna den information som man letar efter, för det är egentligen hela syftet med att ha en 'liten databas'.Innehåll
»»
»
Relaterade artiklar
» Läs och skriv till en textfil 1/2Vi lägger till ytterligare en form, som vi kallar frmSearch i dess .name egenskap och i .caption skriver vi "Sök kompisar". Till denna form tänkte jag mig att vi skulle ha en textbox som vi kallar txtSearch, en commandknapp som vi kallar cmdSearch och dess caption sätter vi till "Starta sökning". Skapa även en commandknapp som vi kallar cmdEnd och dess caption till "Avsluta" .Ytterligare behöver vi någonting som kan visa vårt sökresultat, och till det tar vi en vanlig listbox. Kalla dess .name egenskap för lstResult. Placera dessa kontroller på lämplig plats, och se till att listboxen blir så bred att du kan se namnen i dess helhet senare.
programkod
Nu skall vi lägga till programkod för de olika kontrollerna som vi har skapat, så vi börjar med cmdEnd knappen. Dubbelklicka på denna, så börja vi på en gång.
Nu dubbelklickar vi på cmdSearch och skall skriva programkoden för att leta efter förekomsten som angetts i textboxen och presentera de matchande resultaten i listboxen.
Nu vill har vi skrivit en typisk sökrutin. Det vi egentligen gör är inte så speciellt komplicerat. Först kontrollerar vi att textfilen finns, därefter ser vi till att något skrivist som vi kan söka på. Men sedan kommer ett litet tips. Jag omvandlar söksträngen till uppercase, vilket innebär att all text jag skrivit blir stora bokstäver. Tänk dig att du söker på "aNnA" och startar. Vad händer?, när du kommer till posten "Anna", får du ingen träff. Genom att göra om söktexten till "ANNA" kommer du vid avsökningen av posten (FileBuffer) få en träff i alla fall, under förutsättning att du även omvandlat FileBuffer till uppercase. Om dessa matchar, kommer posten att läggas till i listboxen och därefter är det klart. Skriver du en ny sökning och trycker på knappen, rensas listboxen så inte de gamla sökresultaten ligger kvar.
Tips!, man kan slutligen lägga till följande i slutet av funktionen cmdSearch_Click för att informera resultatet av sökningen och hjälpa användaren innan nästa sökning skall göras:
Nu är det dags att göra sista formen som vi behöver och det är att lista samtliga kompisar. Eftersom vi egentligen redan skrivit denna funktionen (när vi gjorde sökfunktionen)- är det ganska rätt fram.
Börja med att addera en ny form som du kallar frmList, sätt dess caption till "Lista Kompisar". Till denna form lägger vi till en listbox som får .name egenskapen lstTotal. Ytterligare lägger vi till två commandknappar som avses vara för visa lista och avsluta. Sätt den första commandoknappens .name egenskap till cmdList, och dess caption till "Visa lista". Lägg till den andra commandknappen och sätt dess .name egenskap till cmdEnd, och dess caption till "Avsluta". Lägg sedan till en listbox som vi kallar lstKompisar. Nu kan vi börja skriva koden för detta, och börjar med att dubbelklicka på cmdEnd.
Nu dubbelklickar du på cmdList och anger köljande kod.
Så, nu har vi även lagt till denna funktionen och som du säkert kan tänka dig, så är det inte så svårt att även låta dena lista skrivas ut på en skrivare om du skulle vilja det. Här är ett exempel som skriver ut informationen vartefter den hämtas in. Denna komplettering fungerar bara om det finns några poster. gör det inte det, kommer bara ett ark med "Mina kompisar" att skrivas ut.
Nu har vi huvudmeny, alla former och koden till dessa. Nu är det bara att binda ihop knapparna med varje form så de startar. Men först skall vi göra en liten sak, så allting hänger ihop snyggare.
Det finns en egenskap på varje form som heter .startupposition. Om man sätter den till Centerscreen för frmMain och de andra formerna får egenskapen CenterOwner. När detta nu är klart, skall vi bara binda ihop det.
Nu är faktiskt programmet klart att testa. Det du bör tänka på är att om du inte har katalogen c:\exempel så bör du skapa den innan du startar programmet (genom att trycka på F5), glöm inte heller att spara med jämna mellanrum när du skriver koden- det lönar sig. Här finner du projektet och projektfilen som du kan hämta hem. Filhantering
programkod
Nu skall vi lägga till programkod för de olika kontrollerna som vi har skapat, så vi börjar med cmdEnd knappen. Dubbelklicka på denna, så börja vi på en gång.
Private Sub cmdEnd_Click()
' stänger formen
Unload Me
End Sub
Nu dubbelklickar vi på cmdSearch och skall skriva programkoden för att leta efter förekomsten som angetts i textboxen och presentera de matchande resultaten i listboxen.
Private Sub cmdSearch_Click()
' samma sak här, finns inte filen, kan vi inte söka på något.
If Len(Dir("c:\exempel\kompis.txt")) = 0 Then
' filen finns inte, meddela detta och avsluta
MsgBox "Filen finns inte, addera kompisar först!", vbCritical, "Öppna kompis-fil"
Unload Me
End If
' filen finns, vi öppnar den och börjar vårt arbete med att kontrollera
' om du skrivit något i textboxen som vi kan söka efter.
If Len(txtSearch.Text) = 0 Then
' ingen text finns angiven, vi varnar bara med ett ljud
' och låter användaren få skriva in någonting.
Beep
Exit Sub
End If
Dim FreeNr As Long
Dim FileBuffer As String
' rensar listboxen, om det finns något i den tidigare
lstResult.Clear
' får ett aktuellt och ledigt filnummer att använda
FileNr = FreeFile
' omvandlar vår söktext till att bara innehåll stora bokstäver
FindText = UCase(txtSearch.Text)
' öppnar kompis.txt filen som input (endast för läsning)
Open "c:\exempel\kompis.txt" For Input As FileNr
' startar en loop, och läser igenom varje posts
' innehåll och kontrollerar om det matchar den text
' som vi angett att söka efter
' utför så länge vi inte läser sista posten
Do While Not EOF(FileNr)
Line Input #FileNr, FileBuffer
' nu kontrollerar vi om förekomsten i FileBuffer posten
' matchar vår sökta text
If InStr(UCase(FileBuffer), FindText) > 0 Then
' Obs!, se att jag även omvandlar FileBuffer till stora
' bokstäver för att kunna få träff.
' ja, något matchade. Därför lägger vi till denna
' posten i listboxen.
lstResult.AddItem FileBuffer
End If
Loop
' stäng filen igen
Close FileNr
End Sub
Nu vill har vi skrivit en typisk sökrutin. Det vi egentligen gör är inte så speciellt komplicerat. Först kontrollerar vi att textfilen finns, därefter ser vi till att något skrivist som vi kan söka på. Men sedan kommer ett litet tips. Jag omvandlar söksträngen till uppercase, vilket innebär att all text jag skrivit blir stora bokstäver. Tänk dig att du söker på "aNnA" och startar. Vad händer?, när du kommer till posten "Anna", får du ingen träff. Genom att göra om söktexten till "ANNA" kommer du vid avsökningen av posten (FileBuffer) få en träff i alla fall, under förutsättning att du även omvandlat FileBuffer till uppercase. Om dessa matchar, kommer posten att läggas till i listboxen och därefter är det klart. Skriver du en ny sökning och trycker på knappen, rensas listboxen så inte de gamla sökresultaten ligger kvar.
Tips!, man kan slutligen lägga till följande i slutet av funktionen cmdSearch_Click för att informera resultatet av sökningen och hjälpa användaren innan nästa sökning skall göras:
' stäng filen igen
Close FileNr
' för att vara artig, kan man presentera en text, om det inte
' blev några träffar enligt vad som söktes
If lstResult.ListCount = 0 Then
MsgBox "Det finns ingen post som matchar din sökning!", vbInformation, "Fann ingen post"
End If
' rensar textboxen, så det gamla inte står kvar
' när man vill söka igen
txtSearch.Text = ""
End Sub
frmList
Nu är det dags att göra sista formen som vi behöver och det är att lista samtliga kompisar. Eftersom vi egentligen redan skrivit denna funktionen (när vi gjorde sökfunktionen)- är det ganska rätt fram.
Kontroller
Börja med att addera en ny form som du kallar frmList, sätt dess caption till "Lista Kompisar". Till denna form lägger vi till en listbox som får .name egenskapen lstTotal. Ytterligare lägger vi till två commandknappar som avses vara för visa lista och avsluta. Sätt den första commandoknappens .name egenskap till cmdList, och dess caption till "Visa lista". Lägg till den andra commandknappen och sätt dess .name egenskap till cmdEnd, och dess caption till "Avsluta". Lägg sedan till en listbox som vi kallar lstKompisar. Nu kan vi börja skriva koden för detta, och börjar med att dubbelklicka på cmdEnd.
Private Sub cmdEnd_Click()
' avslutar rutinen
Unload Me
End Sub
Nu dubbelklickar du på cmdList och anger köljande kod.
Private Sub cmdList_Click()
' samma sak här, finns inte filen, kan vi inte söka på något.
If Len(Dir("c:\exempel\kompis.txt")) = 0 Then
' filen finns inte, meddela detta och avsluta
MsgBox "Filen finns inte, addera kompisar först!", vbCritical, "Öppna kompis-fil"
Unload Me
End If
Dim FreeNr As Long
Dim FileBuffer As String
' rensar listboxen, om det finns något i den tidigare
lstKompisar.Clear
' får ett aktuellt och ledigt filnummer att använda
FileNr = FreeFile
' öppnar kompis.txt filen som input (endast för läsning)
Open "c:\exempel\kompis.txt" For Input As FileNr
' startar en loop, och läser upp varje posts
' innehåll. Utför så länge vi inte läser sista posten
Do While Not EOF(FileNr)
Line Input #FileNr, FileBuffer
' lägger vi till denna posten i listboxen.
lstKompisar.AddItem FileBuffer
Loop
' stäng filen igen
Close FileNr
' för att vara artig, kan man presenteras en text, om det inte
' fanns några träffar
If lstKompisar.ListCount = 0 Then
MsgBox "Det finns ingen poster registrerade ännu!", vbInformation, "Fanns inga poster"
End If
End Sub
Så, nu har vi även lagt till denna funktionen och som du säkert kan tänka dig, så är det inte så svårt att även låta dena lista skrivas ut på en skrivare om du skulle vilja det. Här är ett exempel som skriver ut informationen vartefter den hämtas in. Denna komplettering fungerar bara om det finns några poster. gör det inte det, kommer bara ett ark med "Mina kompisar" att skrivas ut.
' sätter typsnitt och storlek för utskriften
Printer.FontName = "Arial"
Printer.FontSize = 12
' skriver en liten rubrik först
Printer.Print "Mina kompisar"
Printer.Print "-----------------------------------------------"
' startar en loop, och läser upp varje posts
' innehåll. Utför så länge vi inte läser sista posten
Do While Not EOF(FileNr)
Line Input #FileNr, FileBuffer
' lägger vi till denna posten i listboxen.
lstKompisar.AddItem FileBuffer
Printer.Print FileBuffer
Loop
' säger åt skrivaren att det inte kommer något mer, mata ut
' det aktuella arket.
Printer.EndDoc
Avslutningsvis för frmMain
Nu har vi huvudmeny, alla former och koden till dessa. Nu är det bara att binda ihop knapparna med varje form så de startar. Men först skall vi göra en liten sak, så allting hänger ihop snyggare.Det finns en egenskap på varje form som heter .startupposition. Om man sätter den till Centerscreen för frmMain och de andra formerna får egenskapen CenterOwner. När detta nu är klart, skall vi bara binda ihop det.
Private Sub Form_Load()
' visa formen
Me.Refresh
' ge Windows lite tid att göra det
DoEvents
End Sub
Private Sub cmdAdd_Click()
frmAdd.Show , Me
End Sub
Private Sub cmdFind_Click()
frmSearch.Show , Me
End Sub
Private Sub cmdList_Click()
frmList.Show , Me
End Sub
Private Sub cmdEnd_Click()
Unload Me
End Sub
Nu är faktiskt programmet klart att testa. Det du bör tänka på är att om du inte har katalogen c:\exempel så bör du skapa den innan du startar programmet (genom att trycka på F5), glöm inte heller att spara med jämna mellanrum när du skriver koden- det lönar sig. Här finner du projektet och projektfilen som du kan hämta hem. Filhantering
0 Kommentarer