zoeken en combineren in textfile

Status
Niet open voor verdere reacties.

stenhoeve21

Gebruiker
Lid geworden
7 feb 2013
Berichten
26
Ik heb de volgende vraag. Ik heb een textfile, in deze file staan een aantal regels met als scheidings teken een ":". Elke regel bestaat in feite uit 3 stukken. Het 1e stuk is een getal(ID), het 2e een omschrijving en het 3e uit een getal(waarde)
1:test1:3
2:test2:5
3:test3:6
4:test4:9
5:test5:8
6:test6:7
Ik wil graag (als voorbeeld) de regels met getal 1,3 en 6 in het 1e gedeelte de getallen optellen die in het 3e gedeelte staan. Hetzelfde voor de regels met de getallen 2,4,5 in het 1e gedeelte en daar dan ook weer het 3e gedeelte bij elkaar optellen. Ik dacht zelf aan het string.split o.i.d. De code die ik tot dusver heb staat hieronder. De TextBox1.text heb ik als test er bij in gezet om te bekijken of de split goed ging. Ben ik op de goede weg of wat is wijze om dit voor elkaar te krijgen?
Code:
Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim AllText As String = "", LineOfText As String = ""
        Dim split(2) As String

        OpenFileDialog1.Filter = "Text files (*.TXT)|*.TXT"
        OpenFileDialog1.ShowDialog() 'display Open dialog box
        If OpenFileDialog1.FileName <> "" Then
            Try 'open file and trap any errors using handler
                FileOpen(1, OpenFileDialog1.FileName, OpenMode.Input)
                Do Until EOF(1) 'read lines from file
                    LineOfText = LineInput(1)
                    split = LineOfText.Split(":")
                    'add each line to the AllText variable
                    AllText = AllText & split(0) & "     " & split(1) & "     " & split(2) & vbCrLf
                Loop
               TextBox1.Text = AllText 'display file
            Catch
                MsgBox("Error opening file.")
            Finally
                FileClose(1) 'close file
            End Try
        End If
    End Sub

End Class
 
Gewoon zoiets?

[cpp]Private Function Optellen(ByVal intAr As Integer(), ByVal path As String) As Integer
Dim retVal As Integer = 0
Try
Dim reader As New IO.StreamReader(path)
While Not reader.EndOfStream
Dim line As String = reader.ReadLine
''//Als de array het nummer bevat, tel dan op
If Array.IndexOf(intAr, CInt(line.Split(":")(0))) <> -1 Then
retVal += CInt(line.Split(":")(2))
End If
End While
Catch ex As Exception
MsgBox(ex.Message, 16 + 4096, "Error")
End Try
Return retVal
End Function[/cpp]

Heb het ook even getest:

[cpp]Console.WriteLine(Optellen({1, 3, 6}, My.Computer.FileSystem.SpecialDirectories.Desktop & "\x.txt"))[/cpp]

Output is 16.
 
Bedankt voor je reactie, ik ga het meteen uitproberen, nog wel een korte vraag. Je bent hier vanuit gegaan dat je een bekende bestandsnaam hebt toch? IN mijn geval zaldit niet zo zijn en moet ik m.i. de OpenFileDialog gebruiken. Dat is toch geen probleem of wel?
 
Nee; als je de bestandsnaam binnenkrijgt via een OpenFileDialog, is de bestandsnaam ook bekend, toch? ;)
Gewoon een kwestie van eerst die OFD laten zien om vervolgens de gegevens in de functie in te vullen.
 
Ik wilde het ook even testen maar wanneer ik de Console.Writeline gebruik krijg ik op de accolades { en } 2 fouten, namelijk Expression expected en Comma, ')', or a valid expression continuation expected. Enig idee hoe dat nou kan?
 
Laatst bewerkt door een moderator:
Je bent waarschijnlijk ergens een haakje vergeten.
Wat is je code?
 
Ik had tot dusver
Code:
Public Class Form1
    Private Function Optellen(ByVal intAr As Integer(), ByVal path As String) As Integer
        Dim retVal As Integer = 0
        Try
            Dim reader As New IO.StreamReader(path)
            While Not reader.EndOfStream
                Dim line As String = reader.ReadLine
                ''//Als de array het nummer bevat, tel dan op
                If Array.IndexOf(intAr, CInt(line.Split(":")(0))) <> -1 Then
                    retVal += CInt(line.Split(":")(2))
                End If
            End While
        Catch ex As Exception
            MsgBox(ex.Message, 16 + 4096, "Error")
        End Try
        Return retVal

    End Function
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        
        'OpenFileDialog1.Filter = "Text files (*.TXT)|*.TXT"
        'OpenFileDialog1.ShowDialog() 'display Open dialog box
        'If OpenFileDialog1.FileName <> "" Then
        'FileOpen(1, OpenFileDialog1.FileName, OpenMode.Input)
        'End If

    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Console.WriteLine(Optellen({1, 3, 6}, My.Computer.FileSystem.SpecialDirectories.Desktop & "\x.txt"))
    End Sub
End Class
 
Laatst bewerkt door een moderator:
Je kunt het beter zo aanpakken:

[cpp]Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim ofd As New OpenFileDialog()
If ofd.ShowDialog() = DialogResult.OK Then
MsgBox(Optellen({1, 3, 6}, ofd.FileName))
End If
End Sub[/cpp]
 
Hum, kijk ik ergens over heen? Blijfde de foutmelding houden, met "kringeltjes" onder de { en }:

Error 1 Expression expected.
Error 2 Comma, ')', or a valid expression continuation expected.

Als ik dan toch debug dan kan ik een file openen maar vervolgens bevriest het programma en waneer ik het afsluit komt er als output:
Press enter to continue
Press enter to continue
Press enter to continue
Press enter to continue
Press enter to continue
Press enter to continue
Press enter to continue

Bijzonder toch? Ik waardeer het overigens dat je hier tijd in steekt!
 
Laatst bewerkt door een moderator:
Da's raar... Ik heb exact dezelfde code getest ...
Ben je er zeker van dat het dezelfde code is? Kun je anders een screenshot maken van het geheel?
 
Ah, jij gebruikt een andere versie van Visual Studio (nl 2005).
Het kan zijn dat het daaraan ligt.

Probeer dit eens:

[cpp]Dim intAr As Integer = {1,3,6}
MsgBox(Optellen(intAr, ofd.FileName))[/cpp]

Je kan trouwens je screenshots ook bijv. hier uploaden.

[edit]Idd, het is 2008 ;)[/edit]
 
Laatst bewerkt:
Het is wel 2008, zie bijlage maar ik probeer het.

Dit werkt prima, wel vreemd dat jouw code bij mij een fout geeft. Dit geeft mij te denken waarom ik soms zaken niet voor elkaar krijg met vreemde errors... Zal eens kijken of ik de zaak een keer opnieuw moet installeren.... Enorm bedankt!!
 

Bijlagen

  • VS2008 (Small).jpg
    VS2008 (Small).jpg
    76,6 KB · Weergaven: 30
Laatst bewerkt door een moderator:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan