lezen van waarde uit csv file_1, opzoeken in file_2 en schrijven in csv file3

Status
Niet open voor verdere reacties.

Orcaa

Gebruiker
Lid geworden
1 nov 2010
Berichten
125
Heb een csv file met 1 kolom (file_1) en csv file met 3 kolommen (file_2) en csv file met 2 kolommen (file_3)
voorbeeld file_1(imi.csv) inhoud
IMI0044,
IMI0223,

voorbeeld file_2(imiplatewell.csv)inhoud
imicode,platecode,wellcode
IMI0045,A044,P24,
IMI0223,A023,B7,
IMI0044,A044,D12,
IMI0054,A045,R32,
IMI0123,A045,T14,
IMI0001,A023,A23,

voorbeeld file_3 (imi_output.csv)
A044,D12,
A023,B7,

Nu is het de bedoeling dat de waardes uit file_1 opgezocht worden in file_2 en dat dan naar file_3 de correspondeerende waardes uit kolom2 en kolom 3 geschreven worden. Zie voorbeelden

Heb nu de volgende code, maar werkt niet
Wie kan mij verder helpen

Code:
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim inputfilename As String = "H:\Data\2014\Software\VB2010\Create_csv_DRC_AP_Echo\imi.csv"
        Dim lookupfilename As String = "H:\Data\2014\Software\VB2010\Create_csv_DRC_AP_Echo\imiplatewell.csv"
        Dim outputfilename As String = "H:\Data\2014\Software\VB2010\Create_csv_DRC_AP_Echo\imi_output.csv"
        Dim input As String = ""
        Dim lookup() As String

        'use a stream reader to read the file line by line
        Using srin As New StreamReader(inputfilename)
            'read a line as split into parts at the equal sign
            input = srin.ReadLine()
            Do Until input = ""
                Do Until input = ""
                    Using srlu As New StreamReader(lookupfilename)
                        lookup = srlu.ReadLine.Split(","c)
                        If lookup(0) = input Then
                            Using srop As New StreamWriter(outputfilename)
                                srop.WriteLine(lookup(1), lookup(2))
                            End Using
                        End If
                        lookup = srlu.ReadLine.Split(","c)
                    End Using
                    input = srin.ReadLine()
                Loop
            Loop
        End Using

    End Sub
 
Werkt niet is wel een heel ruim begrip om er iets over te kunnen zeggen. Krijg je een foutmelding? Zoja, welke dan?
 
Nee geen foutmelding maar nadat de eerste waarde uit file_1 is ingelezen , dan wordt deze waarde niet met alle waarden uit file_2 vergeleken . En wordt dus niet de juiste waarde gevonden. En wordt er dus niets naar file_3 geschreven.
Hopenlijk kan jij zien waar het fout gaat
 
Ik zie wel wat vreemds in de code maar kan het niet direct uitleggen,
Als je die input csv bestanden ook kan plaatsen dan wil ik wel even een kijkje nemen.
 
Heb de inhoud van de 3 files erin staan. De input.csv file is file_1 met alleen maar IMI044 en IMI0223.
 
Ik heb je code iets aangepast maar de eigenlijke oorzaak zit in het feit dat het bestand imi.csv regels bevat die eindigen met een komma.
Omdat je deze niet Split komt de waarde daarom nooit overeen met een waarde uit imiplatewell.csv omdat deze waarden na de Split geen komma meer bevatten. Het bestand ini.csv mag dus geen komma aan het einde van een waarde hebben staan.

Bij deze de aangepaste code:
Code:
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim inputfilename As String = "H:\Data\2014\Software\VB2010\Create_csv_DRC_AP_Echo\imi.csv"
        Dim lookupfilename As String = "H:\Data\2014\Software\VB2010\Create_csv_DRC_AP_Echo\imiplatewell.csv"
        Dim outputfilename As String = "H:\Data\2014\Software\VB2010\Create_csv_DRC_AP_Echo\imi_output.csv"
        Dim input As String = ""
        Dim lookup() As String

        'use a stream reader to read the file line by line
        Using srin As StreamReader = New StreamReader(inputfilename)
            'read a line as split into parts at the equal sign
            input = srin.ReadLine()
            Do Until input = ""
                Using srlu As StreamReader = New StreamReader(lookupfilename)
                    lookup = srlu.ReadLine.Split(","c)
                    Do Until lookup(0) = ""
                        If lookup(0) = input Then
                            Using srop As StreamWriter = New StreamWriter(outputfilename)
                                srop.WriteLine(lookup(0) & "," & lookup(1))
                            End Using
                        End If
                        Try
                            lookup = srlu.ReadLine.Split(","c)
                        Catch ex As Exception
                            Exit Do
                        End Try
                    Loop
                End Using
                input = srin.ReadLine()
            Loop
        End Using
    End Sub
End Class
 
Laatst bewerkt:
Ga het bekijken en proberen te begrijpen. Zal file met en zonder extra komma proberen. Alvast dank voor eerste antwoord
 
Met komma gaat het niet werken. Als je dat bestand niet zonder die komma kan krijgen moet je die eraf halen in het programma, direct nadat je een regel uit het input bestand hebt gelezen.
 
Heb de aanpassingen aangebracht en het werkt nu. Eerst werd alleen de laatste waarde in de outputfile gezet, maar nadat ik de setting naar Append heb aangepast is het ok.
De inputfile is aangepast zonder de extra komma aan het einde.

Edmoor bedankt voor je hulp
 
Ok dan. En graag gedaan :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan