Lathund - Spara, öppna och skriva ut filer
Förord
I Visual Basic kan man arbeta med ASCII-filer (filer med oformaterad text) på tre olika sätt: sekventiellt, slumpmässigt och binärt. I denna lathund behandlas endast det sekventiella sättet, eftersom det är vanligast.Innehåll
»»
Relaterade artiklar
» Lathund - API-anrop» Lathund - Arrayer, egna datatyper och numreringar
» Lathund - Databaser
» Lathund - Felhantering
» Lathund - Grundläggande syntax
» Lathund - Inbyggda funktioner
» Lathund - Klassmoduler
» Lathund - Kortkommandon
» Lathund - Namngivning och deklarationer
» Lathund - Några extra tips
» Lathund - Slingor och operatorer
» Lathund - Variablers och konstanters räckvidd
Spara, öppna och skriva ut filer
Exempel på sekventiell skrivning till fil:
Private Sub WriteToFile()
Open "C:\Mina dokument\Min fil.txt" For Output As #1
Print #1, "Goddag"
Print #1, "Adjö"
Close #1
End Sub
Istället för ettan kan man använda en Integer som man tilldelar ett värde med funktionen FreeFile. Då kan man vara säker på att numret inte redan är upptaget av en annan öppen fil:
Private Sub WriteToFile()
Dim intFree As Integer
intFree = FreeFile
Open "C:\Mina dokument\Min fil.txt" For Output As #intFree
Print #intFree, "Goddag"
Print #intFree, "Adjö"
Close #intFree
End Sub
Om filen C:\Mina dokument\Min fil.txt inte finns i förväg skapas den. Om den finns i förväg skrivs den över. Om mappen C:\Mina dokument inte finns i förväg uppstår ett fel.
Hur gör man om man vill ha citattecken (") mitt i texten? Lösningen på detta problem är funktionen Chr. Chr(34) ger ett citattecken.
Om man vill lägga till text i slutet av en befintlig fil kan man skriva som i nästa exempel:
Private Sub AppendToFile()
Open "C:\Mina dokument\Min fil.txt" For Append As #1
Print #1,
Print #1, "Vänta ett slag"
Print #1, "Här kommer mera"
Close #1
End Sub
Om man vill skapa en tom rad i filen skriver man endast Print #1,
Exempel på sekventiell läsning från fil:
Private Sub ReadFromFile()
Dim strLineOne As String
Dim strLineTwo As String
Open "C:\Mina dokument\Min fil.txt" For Input As #1
Line Input #1, strLineOne
Line Input #1, strLineTwo
Close #1
MsgBox strLineOne
MsgBox strLineTwo
End Sub
Variabeln strLineOne tilldelas det som står på första raden i filen och variabeln strLineTwo tilldelas det som står på andra raden. Om man inte vet hur många rader filen innehåller kan man göra en slinga:
Private Sub ReadFromLongFile()
Dim strAllText As String
Dim strCurrentLine As String
Open "C:\Mina dokument\Min fil.txt" For Input As #1
If LOF(1) > 1023 Then
Close #1
MsgBox "Texten är för lång för att visas i en Message Box."
Exit Sub
End If
Do While Not EOF(1)
Line Input #1, strCurrentLine
strAllText = strAllText & strCurrentLine & vbCrLf
Loop
Close #1
MsgBox strAllText
End Sub
Den inbyggda konstanten vbCrLf ger en radbrytning. Använd alltid denna konstant när du behöver radbrytningar i Visual Basic!
EOF(1) betyder slutet av filen. LOF(1) ger totala antalet tecken i filen.
Istället för Print #1 kan man skriva Write #1. Då kommer varje rad i filen att omges av citattecken, vilket kanske inte är önskvärt. Om man använder Print #1 för att skriva rekommenderar Microsoft att man använder Line Input #1 för att läsa. Om man däremot använder Write #1 för att skriva rekommenderas Input #1 för att läsa.
Ovanstående metoder är dock inte särskilt effektiva om man vill läsa hela texten i en fil och presentera den i en kontroll, t ex en vanlig textruta. Då är funktionen Input mycket bättre. Ett exempel:
Private Sub cmdView_Click()
Open "C:\Mylongfile.txt" For Input As #1
txtMyTextBox.Text = Input(LOF(1), #1)
Close #1
End Sub
Om du använder detta exempel vill du antagligen sätta textrutans egenskap MultiLine till True. Får du problem kan du pröva att ändra andra raden till
Open "C:\Mylongfile.txt" For Binary As #1
Att göra en utskrift är enkelt. Man använder objektet Printer, som är systemets standardskrivare, och uttrycket Print. Det är viktigt att avsluta med metoden EndDoc. Metoden NewPage ger en sidbrytning, metoden Line ritar linjer och rektanglar, metoden Circle ritar cirklar och ellipser och metoden PaintPicture skriver ut en bild som man har placerat i en kontroll av typen PictureBox. Objektet Printer har dessutom ett stort antal egenskaper som kan styra teckenformat och textens placering. Ett exempel:
Private Sub TestPrinter()
Printer.Print "Nu prövar vi att göra en utskrift!"
Printer.Print
Printer.Print "Förra raden blev tom..."
Printer.NewPage
Printer.Print "...och detta hamnade på sidan två!"
Printer.Print "Nu är det slut."
Printer.EndDoc
End Sub
VARNING!
Observera att man lustigt nog inte kan skriva så här i Visual Basic:
Private Sub TestPrinter()
With Printer
.Print "Nu prövar vi att göra en utskrift!"
.Print
.Print "Förra raden blev tom..."
.NewPage
.Print "...och detta hamnade på sidan två!"
.Print "Nu är det slut."
.EndDoc
End With
End Sub
Uttrycket With fungerar nämligen inte tillsammans med uttrycket Print.
Kopiera och klistra in
Man kan kopiera och klistra in text med hjälp av objektet Clipboard och dess tre metoder Clear, SetText och GetText. Observera att man ska använda metoden Clear före metoden SetText.Så här kan man kopiera en text...
Clipboard.Clear
Clipboard.SetText txtMyOldTextBox.Text
...och så här kan man klistra in samma text...
txtMyNewTextBox.Text = Clipboard.GetText
Objektet Clipboard har även tre andra metoder: SetData, GetData och GetFormat. SetData och GetData kan användas för att kopiera och klistra in bilder. GetFormat kan användas för att undersöka vad som har kopierats eller klippts ut.
Man kan även kopiera och klistra in med hjälp av API-anrop.
0 Kommentarer