[VB] listview opslaan in bestand

Pagina: 1
Acties:
  • 204 views sinds 30-01-2008
  • Reageer

  • -FoX-
  • Registratie: Januari 2002
  • Niet online

-FoX-

Carpe Diem!

Topicstarter
Ik heb een listview gemaakt met 4 kolommen.
Nu wil ik alle gegevens die daarin zitten opslaan in een bestand. Zodat ik deze later terug eens kan openen, en gegevens bijvoegen.

Op welke manier kan ik dit het beste realiseren? :?

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 21:01

.oisyn

Moderator Devschuur®

Demotivational Speaker

per item de data in een structure gooien, en die naar een bestand schrijven?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Op welke manier kan ik dit het beste realiseren ?
eeuh . .1 voor 1?

code:
1
2
3
4
5
open file
  start loop
    write element
  end loop
close file

  • -FoX-
  • Registratie: Januari 2002
  • Niet online

-FoX-

Carpe Diem!

Topicstarter
Verwijderd schreef op 19 september 2002 @ 00:01:
[...]


eeuh . .1 voor 1?

code:
1
2
3
4
5
open file
  start loop
    write element
  end loop
close file
jaaahhhh :Z

Verwijderd

Wat heb je al aan code? Weet je al hoe je sowieso naar een file schrijft? Weet je hoe je list items kunt opvragen, en hoe je de kolommen binnen zo'n item kunt opvragen? Misschien is het zinvoller om wat initiatief te tonen dan anderen aan te vallen.

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:33
Verwijderd schreef op 19 september 2002 @ 00:01:
[...]


eeuh . .1 voor 1?

code:
1
2
3
4
5
open file
  start loop
    write element
  end loop
close file


Ik dacht dat jij al eens verwittigd werd voor het plaatsen van onzinnige replies?

https://fgheysels.github.io/


  • -FoX-
  • Registratie: Januari 2002
  • Niet online

-FoX-

Carpe Diem!

Topicstarter
Verwijderd schreef op 19 september 2002 @ 01:18:
Wat heb je al aan code? Weet je al hoe je sowieso naar een file schrijft? Weet je hoe je list items kunt opvragen, en hoe je de kolommen binnen zo'n item kunt opvragen? Misschien is het zinvoller om wat initiatief te tonen dan anderen aan te vallen.
Tuurlijk heb ik al code.
Om de tekstvelden toe te voegen aan de listview:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub cmd_toevoegen_Click()

If MsgBox("op: " & txt_datum.Text & vbCrLf & _
        txt_uren & " uren gewerkt" & vbCrLf & _
        txt_euruur & " €/uur" & vbCrLf & vbCrLf & _
        "Is deze informatie correct?", vbYesNo, "correcte info") _
        = vbYes Then
Dim itm_X As ListItem
Set itm_X = ListView.ListItems.Add(, , txt_datum.Text) ' Author.
    itm_X.SubItems(1) = txt_uren.Text & " uren"
    itm_X.SubItems(2) = txt_euruur.Text
    itm_X.SubItems(3) = txt_uren.Text * txt_euruur.Text
End If
End Sub


Om een file te openen (in een gewoon tekstveld, zo had ik het eerst, dit werkt dus niet meer met de listview):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Private Sub mnu_openen_Click()
    Wrap$ = Chr$(13) + Chr$(10)  'create wrap character
    CommonDialog1.Filter = "Text files (*.JST)|*.JST"
    CommonDialog1.ShowOpen       'display Open dialog box
    If CommonDialog1.FileName <> "" Then
        Form1.MousePointer = 11  'display hourglass
        Open CommonDialog1.FileName For Input As #1
        On Error GoTo TooBig:    'set error handler
        Do Until EOF(1)          'then read lines from file
            Line Input #1, LineOfText$
            AllText$ = AllText$ & LineOfText$ & Wrap$
        Loop
        
        txtOverzicht.Text = AllText$  'display file
        txtOverzicht.Enabled = True
        mnu_opslaan.Enabled = True
        txt_datum.Enabled = True
        txt_uren.Enabled = True
        txt_euruur.Enabled = True
        cmd_toevoegen.Enabled = True
CleanUp:
        Form1.MousePointer = 0   'reset mouse
        Close #1                 'close file
    End If
    Exit Sub
TooBig:             'error handler displays message
    MsgBox ("The specified file is too large.")
    Resume CleanUp: 'then jumps to CleanUp routine
End Sub

en om deze dan weer op te slaan had ik:
code:
1
2
3
4
5
6
7
8
9
Private Sub mnu_opslaan_Click()
CommonDialog1.Filter = "Text files (*.JST)|*.JST"
CommonDialog1.ShowSave
If CommonDialog1.FileName <> "" Then
    Open CommonDialog1.FileName For Output As #1
    Print #1, txtOverzicht.Text
    Close #1
End If
End Sub


Ik had alles eerst met textboxe's, maar het leek me beter en mooier om alles met een listview te doen. Maar nu weet ik niet hoedat ik dit het beste kon doen om deze dan op te slaan in een file

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:33
Doe zoals .oisyn zegt.

Maak een record (bv TMyData) met daarin de velden die je wilt gaan opslaan.

Lees dan die file in in een buffer van TMyData - records en overloop dan jouw buffer en voor ieder element maak je een rij in je listview.

https://fgheysels.github.io/


Verwijderd

Kan je er niet met een loopje door heen lopen en dan alles wegschrijven ?
Hoef je ook niet meer alles in een record weg te schrijven. Lijkt me ook een beetje overbodig omdat het in de listview ook al geordend is opgeslagen.

Visual Basic:
1
2
3
For x = 1 To ListView1.ListItems.Count
    print #1, listview1.listitems(x).text
next x


de code voor de subitems zal je dan zelf even moeten maken :)

Verwijderd

Ik dacht dat jij al eens verwittigd werd voor het plaatsen van onzinnige replies?
klopt .. . dit was ook niet bedoeld als onzinnig . .. IMHO is de vraag nogal simpel en mijn antwoord klopt . ..

deze gegevens sla je 1 voor 1 op in een 'erg simpel' loopje . . vandaar de 'pseudo' code

  • Sponge
  • Registratie: Januari 2002
  • Laatst online: 28-08 17:06

Sponge

Serious Game Developer

Skizmo heeft ook gelijk :)

Je zou de naam, en alle subitems op een regel kunnen zetten (comma delimited), en 1 regel als 1 listitem gebruiken

dus krijg je (beetje p-code):

file:
naam,subitem1,subitem2,subitem3

code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
dim lngfreeFile as long, I as long
dim strLine as string,strsplit() as string
dim myListItem as Listitem

lngFreeFile = freefile

open "c:\test.txt" for input as #lngfreefile
do while not eof(lngfreefile)
    line input #lngfreefile, strline
    '//Maak array met alle items, "," als seperator
    strsplit = Split(strline,",")    

     '//
    mylistitem = listview.listitems.add strsplit(0)

    for I = 1 to ubound(strsplit)
    mylistitem.subitems(i).text = strsplit(i)
    next I
loop
close #lngfreefile


schrijven
code:
1
2
3
4
5
6
7
8
9
10
11
12
*File openen*
dim myListitem as listitem
dim I as long
dim strTemp as string
For each mylistitem in listview.listitems
  strtemp = ""
  For I = 0 to mylistitems.subitems.count
  strtemp = strtemp & mylistitem.subitems(i).text & ","
  next I
  print #file, mylistitem.text & "," & left$(strtemp,len(strtemp)-1) '//haal laatste komma weg
next
close #file



Uit m'n hoofd, en in quick reply, zit vast ergens nog een fout.. Ben sowieso eigenlijk al gek om de code te typen :x

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 13:54

Crazy D

I think we should take a look.

Let erop dat ,-seperated leuk is totdat je waardes wilt wegschrijven waar een , in voorkomt :)

Exact expert nodig?


Verwijderd

Ik gebruik dan ook altijd een CSV formaat die de ";"-seperator gebruikt... Tot dusver heeft deze altijd bij mij gewerkt...

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 13:54

Crazy D

I think we should take a look.

Ja, of de | :) Hoewel ik ook vaak strings tussen " en " zet, en dan gewoon de , als scheidingsteken (en decimaalteken een .). Maar dat is wel iets meer werk (maar ja dat schrijf je ook 1 keer....).

Exact expert nodig?

Pagina: 1