15. april 2003 - 10:43Der er
24 kommentarer og 1 løsning
VB 6.0 Undgå overskrivning af gamle data i fil
Jeg sidder og studerer(fnis!)og vil gerne undgå at overskrive de data jeg allerede har gemt. Hvordan gør jeg det. Jeg har nedenstående: Option Explicit Dim navn(200) Dim antalnavne As Integer
Private Sub Command1_Click() antalnavne = 0 Do antalnavne = antalnavne + 1 navn(antalnavne) = InputBox("Skriv navn nr. " & antalnavne & ". Afslut med tomt navn") If navn(antalnavne) = "" Then antalnavne = antalnavne - 1 Exit Do End If Loop MsgBox "Du skrev " & antalnavne & " navne." End Sub
Private Sub Command2_Click() Dim navnid As Integer Open "c:\vbprojekter\familie.txt" _ For Output As #1 For navnid = 1 To antalnavne Print #1, navn(navnid) Next Close #1 End Sub
Private Sub Command3_Click() antalnavne = 0 Open "c:\vbprojekter\familie.txt" _ For Input As #1 Do While EOF(1) = False antalnavne = antalnavne + 1 Line Input #1, navn(antalnavne) Loop Close #1 End Sub
Private Sub Command4_Click() Dim navnid As Integer List1.Clear For navnid = 1 To antalnavne List1.AddItem navn(navnid) Next
jelzin101 Så blev min kode ændret til: og det virker ikke. Jeg kan måske godt skrive til filen men jeg får intet frem igen. Kunne du prøve at skrive hele koden ind i den jeg har oplyst? Private Sub Command3_Click() antalnavne = 0 Open "c:\vbprojekter\familie.txt" For Append As #1 Do While EOF(1) = False antalnavne = antalnavne + 1 Print #1, navn(antalnavne) Loop Close #1 End Sub
>> maagefinke: Din kode ser lidt sjov (forkert) ud, og jeg kan ikke gennemskue hvad du forsøger (hvad bruger du EOF til?) - men kik på nogle af de links jeg gav dig, der er masser af gode forklaringer :o)
>martin moth Jeg forsøger blot at lære at skrive til en fil. Og lave tilføjelser til den. Koden virker men når jeg tilføjer - overskrives der. Det er fra bogen start Visual Basic 6.0 men jeg er ikke nået så langt. Måske foregriber jeg begivenhedernes gang. Men sådan lærer jeg bedst. Det jeg bare lige ville have at vide er hvad jeg skal tilføje for ikke at overskrive.
maagefinke: Den kode du har vist kan jeg i bedste vilje kun få til at ligne noget vrøvl. Skrive/læse fra fil: http://www.eksperten.dk/spm/252223 Appende til fil: Open "C:\MinFil.txt" For Append As #1 Print #1, "Blaaaa - denne linie bliver TILFØJET UNDER de andre" Close #1
I din kode ligner, at du forsøger at både læse, appende og alt muligt på een gang ;o)
Med command1 skaffer jeg data til filen. famile.txt Med command2 gemmer jeg data Med command3 indlæser jeg data fra filen Med command 4 får jeg vist data i filen famile.txt alt virker. Jeg indtaster fx 1 a-sen 2b-sen gemmer og henter frem igen vil tilføje 3 c-sen og 4 d-sen gemmer og vil se filen nu står der i filen c-sen og d-sen a-sen og b-sen blev overskrevet. Det jeg spørger om er ganske enkelt (efter min mening) hvordan skal jeg ændre de bestående 4 koder hvis jeg vil kunne se alle 4 navne i filen ?
Så går det galt når du tilføjer data - sikkert fordi du åbner som Input og ikke append. Du kan jo åbne filen i en texteditor, for at følge med i hvad der sker med filen. Denne kode tilføjer til en fil uden at overskrive:
Open "C:\MinFil.txt" For Append As #1 Print #1, "Blaaaa - denne linie bliver TILFØJET UNDER de andre" Close #1
Men vis din kode, så skal jeg nok finde fejlen :o)
Option Explicit Dim navn(200) Dim antalnavne As Integer Private Sub SkafData_Click() antalnavne = 0 Do antalnavne = antalnavne + 1 navn(antalnavne) = InputBox("Skriv navn nr. " & antalnavne & ". Afslut med tomt navn") If navn(antalnavne) = "" Then antalnavne = antalnavne - 1 Exit Do End If Loop MsgBox "Du skrev " & antalnavne & " navne." End Sub
Private Sub GemData_Click() Dim navnid As Integer Open "c:\vbprojekter\familie.txt" _ For Output As #1 For navnid = 1 To antalnavne Print #1, navn(navnid) Next Close #1 End Sub
Private Sub IndlaesData_Click() antalnavne = 0 Open "c:\vbprojekter\familie.txt" _ For Input As #1 Do While EOF(1) = False antalnavne = antalnavne + 1 Line Input #1, navn(antalnavne) Loop Close #1
End Sub
Private Sub VisData_Click() Dim navnid As Integer List1.Clear For navnid = 1 To antalnavne List1.AddItem navn(navnid) Next
'Gemmer antalnavne i en lokal variabel Dim OprindeligtAntal as integer Dim i As Integer OprindeligtAntal = antalnavne
'Beder brugeren om at indtaste nye navne i dit array Do antalnavne = antalnavne + 1 navn(antalnavne) = InputBox("Skriv navn nr. " & antalnavne & ". Afslut med tomt navn") If navn(antalnavne) = "" Then antalnavne = antalnavne - 1 Exit Do End If Loop MsgBox "Du TILFØJEDE " & antalnavne & " navne."
'Tilføjer til filen Open "c:\vbprojekter\familie.txt" For Append As #1 for i = oprindeligtantal to antalnavne Print #1, "navn(i) next i Close #1 End Sub
Der er plads til masser af forbedringer i dit program - du resetter antalnavne i SkafData_Click(), og klikker du på den flere gange i dit program mens det kører, går der ged i det. Desuden bør du nok kikke på Redim og Preserve mht. dit Array - der er ingen grund til fra start at gøre plads til 200 poster i det. Desuden fylder du aldrig noget ind på første plads i arrayet (der starter med index 0, ikke index 1) Osv. Men du siger jo selv at du er i "opstartsfasen", så det kommer nok ;o)
I ovenstående kode har jeg ikke skrevet noget, der ikke har været nævnt i dette spørgsmål 6-7 gange før, men det kan jo være svært at se det hele i den store sammenhæng ;o)
PS: Alternativt behøver du slet ikke bruge append, du kan jo åbne filen for OUTPUT og så lade tælleren gå fra 1 til antalnavne i stedet for fra oprindeligtantal til antalnavne - så skriver du bare HELE arrayet til filen een gang til (og overskriver det der stod før), fra start til slut af arrayet. Er der 10000000 linier er det dog langt hurtigere at bruge Append :o)
Mange tak for de gode råd. Det er lidt overvældende. Problemet når man er nybegynder er jo at formulere problemet! Jeg har forhøjet lidt fordi det nok var sværere end som så. Mange tak.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.