problemen met verwijderen en bewaren bestand

  • Onderwerp starter Onderwerp starter Hope2
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

Hope2

Gebruiker
Lid geworden
5 jan 2008
Berichten
21
In mijn programma wordt een txt-bestand ingelezen. Elke regel uit dit bestand wordt opgesplitst in drie delen die elk in een array terechtkomen. Het is nu de bedoeling dat ik een artikel in de combobox kan kiezen en dit verwijderen, dit lukt echter niet. Alle artikels blijven in de combobox staan. Als er een artikel verwijderd is, moet ik alles terug kunnen opslaan in een txt-bestand, ook dit lukt echter niet. Iemand die kan helpen?

Hier mijn code.

Code:
Imports System.IO

Public Class frmArtikels
    Dim artnaam(), artfoto() As String
    Dim artprijs() As Decimal
    Dim artikelSelect As New OpenFileDialog

    Private Sub SorteerArtikelOplopend(ByRef artnaam() As String, ByVal artfoto() As String, ByVal artprijs() As Decimal)
        Dim teller1, teller2, index As Integer

        Dim temp1, temp2, temp3 As String

        For teller1 = 0 To artnaam.Length - 1
            index = teller1
            For teller2 = teller1 + 1 To artnaam.Length - 1
                If artnaam(teller2) < artnaam(index) Then
                    index = teller2
                End If
            Next
            temp1 = artnaam(teller1)
            temp2 = artfoto(teller1)
            temp3 = artprijs(teller1)
            artnaam(teller1) = artnaam(index)
            artfoto(teller1) = artfoto(index)
            artprijs(teller1) = artprijs(index)
            artnaam(index) = temp1
            artfoto(index) = temp2
            artprijs(index) = temp3
        Next
    End Sub

Private Sub cboArtikels_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles cboArtikels.SelectedIndexChanged
        txtPrijsArtikels.Text = CDec(artprijs(cboArtikels.SelectedIndex))
        pctArtikels.ImageLocation = artfoto(cboArtikels.SelectedIndex)
        uitvoer = cboArtikels.SelectedItem
        totaal += CDec(txtPrijsArtikels.Text)
    End Sub

    Private Sub btnToevoegen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnToevoegen.Click
        frmKassa.txtBestelling.Text &= uitvoer & vbCrLf
        frmKassa.txtTotaal.Text = CStr(totaal)
        Me.Close()
    End Sub

    Private Sub mnuSorteerArtikelAZ_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuSorteerArtikelAZ.Click
        Dim teller As Integer

        cboArtikels.Items.Clear()
        Call SorteerArtikelOplopend(artnaam, artfoto, artprijs)

        For teller = 0 To artnaam.Length - 1
            cboArtikels.Items.Add(artnaam(teller))
        Next
    End Sub

Private Sub mnuBestandOpen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuBestandOpen.Click
        Dim pad, hulpstring, invoer As String
        Dim scheidingsteken As String = "$"
        Dim positie1, positie2, index As Integer

        With artikelSelect
            .Filter = "Tekstbestanden (*.txt)|*.txt"
        End With

        invoer = artikelSelect.ShowDialog()
        invoer = artikelSelect.FileName

        Dim fs As New FileStream(invoer, FileMode.Open, FileAccess.Read)
        Dim sr As New StreamReader(fs)

        index = 0

        While sr.Peek <> -1
            ReDim Preserve artnaam(index)
            ReDim Preserve artfoto(index)
            ReDim Preserve artprijs(index)

            pad = sr.ReadLine
            positie1 = InStr(pad, scheidingsteken)
            artnaam(index) = Deelvoorscheiding(pad, positie1)
            hulpstring = Deelnascheiding(pad, positie1)
            positie2 = InStr(hulpstring, scheidingsteken)
            artprijs(index) = Deelvoorscheiding(hulpstring, positie2)
            artfoto(index) = Deelnascheiding(hulpstring, positie2)

            cboArtikels.Items.Add(artnaam(index))

            index += 1
        End While

        fs.Close()
        sr.Close()

        pctArtikels.SizeMode = PictureBoxSizeMode.Zoom
        txtPrijsArtikels.ReadOnly = True
        txtPrijsArtikels.TextAlign = HorizontalAlignment.Right
        cboArtikels.Select()
    End Sub

    Private Sub mnuBestandVerwijder_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuBestandVerwijder.Click
        Dim antwoord As Windows.Forms.DialogResult

        If cboArtikels.SelectedIndex <> -1 Then
            MessageBox.Show("Wil je het artikel verijderen?", "Verwijderen artikel", MessageBoxButtons.YesNo)
            If antwoord = Windows.Forms.DialogResult.Yes Then
                artnaam(cboArtikels.SelectedIndex).Remove(cboArtikels.SelectedIndex)
                CStr(artprijs(cboArtikels.SelectedIndex)).Remove(cboArtikels.SelectedIndex)
                artfoto(cboArtikels.SelectedIndex).Remove(cboArtikels.SelectedIndex)
            End If
        End If

        cboArtikels.Items.Clear()
        For teller = 0 To artnaam.Length - 1
            cboArtikels.Items.Add(artnaam(teller))
        Next
    End Sub

    Private Sub mnuBestandBewaar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuBestandBewaar.Click
        Dim index As Integer

        Dim fs As New FileStream(artikelSelect.FileName, FileMode.Create, FileAccess.Write)
        Dim sw As New StreamWriter(fs)

        For index = 0 To artnaam.Length - 1
            sw.WriteLine(artnaam(index) & "$" & artprijs(index) & "$" & artfoto(index))
        Next

        sw.Close()
        fs.Close()
    End Sub
End Class
 
Dit is wat in een txt-bestand staat. Het dollarteken dient als scheidingsteken om de delen op te splitsen en in arrays te plaatsen.

Code:
ASRock 4coredual-SATA2 Mboard SO.775$59,99$D:\Foto's\Motherboard\ASRock 4coredual.jpg
Gigabyte GA-EP45-DS4 moederbord S775$175,00$D:\Foto's\Motherboard\Gigabyte GA-EP45-DS4.jpg
Asus rampage extreme moederbord S775$359,00$D:\Foto's\Motherboard\Asus rampage.jpg
MSI K9N SLI-F V2 moederbord SO.AM2+$64,99$D:\Foto's\Motherboard\MSI K9N.jpg
Asus M3A78-T moederbord AM2+$145,00$D:\Foto's\Motherboard\Asus M3A78-T.jpg
 
nog 1 vraag voor we verder gaan ...

maak jij die txt bestanden zelf aan? of krijg je die aangeleverd?
 
Dat is wat ik al dacht. Je zou beter met een XML kunnen gaan werken. Dat kan met een paar regels vb code veel makkelijker, zowel lezen als schrijven.

MSN mij maar even op *******************

dan zal ik je het precies uitleggen.

Mvg Pizara
 
Laatst bewerkt:
't Is een uitbreiding voor een schoolopdrachtje en moet gebruik maken van een txt-bestand.
 
Zeg maar tegen je leraar dat ie een jaar of 5 achterloopt om dit te regelen met een txtbestand. XML is het beste, maar een XML is ook gewoon een txt bestand hoor.

Maar goed hier is je code.

Code:
Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Call ReadFile()
    End Sub

    Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
        Button1.Enabled = True
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        ComboBox1.Items.RemoveAt(ComboBox1.SelectedIndex)
        Button1.Enabled = False
        Call WriteFile()
    End Sub

    Private Sub ReadFile()

        Button1.Enabled = False
        Dim sr As New System.IO.StreamReader("../../TextFile1.txt")

        While Not sr.EndOfStream
            ComboBox1.Items.Add(sr.ReadLine())
        End While

    End Sub

    Private Sub WriteFile()

        Dim wr As New System.IO.StreamWriter("../../TextFile2.txt", False)
        Dim count As Integer = 0

        While Not count = ((ComboBox1.Items.Count))
            wr.WriteLine(ComboBox1.Items.Item(count))
            count = count + 1
        End While

        wr.Flush()
        wr.Close()
        wr.Dispose()

    End Sub

End Class

combootje op je form toevoegen , en paths aanpassen.
 
Hoi Pizara,

Alvast bedankt voor je hulp. Ben eventjes op vakantie geweest en daar nog wat verder in de boeken gedoken. Voor het bewaren van het bestand heb ik ondertussen zelf al een oplossing gevonden.

Code:
Private Sub mnuBestandBewaar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuBestandBewaar.Click
        Dim fs2 As New FileStream(invoer, FileMode.Create, FileAccess.Write)
        Dim sw As New StreamWriter(fs2)
        Dim index As Integer

        For index = 0 To artnaam.Length - 1
            sw.WriteLine(artnaam(index) & "$" & artprijs(index) & "$" & artfoto(index))
        Next

        sw.Close()
        fs2.Close()
    End Sub

Alleen het verwijderen lukt nog niet. Met RemoveAt had ik het ook al geprobeerd, maar er gebeurt helemaal niets. Heb ook al geprobeerd om het geselecteerde item te vervangen door het laatste en het laatste te verwijderen, maar ook dat lukt niet. Ook de index met 1 verhogen vanaf de positie van het geselecteerde item lukt niet.

Ik vertrek morgen terug voor enkele dagen op vakantie en zal dus nog eventjes verder moeten zoeken.
 
dit zou gewoon moeten werken. ik heb het uitgebreid getest en het werkte iig bij mij op VB2008.
 
Heb alles opgelost gekregen. Ondertussen nog eens met jouw code geprobeerd en deze werkt inderdaad ook en ziet er nog een stuk beter uit als de mijne. Heb nu twee versies. Ik heb nog een boek gekocht over VB en daar staat inderdaad veel in over xml, dus daar ga ik mij ook nog even in verdiepen.
Alvast bedankt voor je hulp.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan