Avatar billede pomfrit Nybegynder
31. august 2007 - 14:29 Der er 3 kommentarer og
1 løsning

csv fil fletning

Jeg har 2 csv filer, der skal "flettes".

Fil 1: Indeholder adresser
Id, fornavn, efternavn, adresse, postnr, by
50, Hans, Hansen, Æblevej 25, 1111, Hanseby
51, Jens, Jensen, Jensevej 2, 2222, Jenseby
52, Kurt, Kurtsen, Kurtevej 3, 3333, Kurteby
53, Dorte, Nielsen, Nilsevej, 4444, Odense

Fil 2: Indeholder rettelser til fil 1.
Id, fornavn, efternavn, adresse, postnr, by
51, , , Hansevej 1, ,
53, Niels, , , , Nilseby

Det er kun de linier, der skal rettes der er i fil 2.

Hvordan får jeg opdateret fil 1 med rettelserne fra fil 2?
Avatar billede kabbak Professor
31. august 2007 - 17:28 #1
Prøv at teste denne


Public Sub Ret_adresseliste()
    Dim Liste() As Variant
    Dim Ret() As Variant
    Dim I As Long, X As Integer, Y As Integer
    Dim Linje As String
    'Ret nedstående til dine filnavne
    fil1 = "C:\test\Rettelse.csv" ' filen med rettelser
    fil2 = "C:\test\Adresseliste.csv" ' filen der skal rettes i
    fil3 = "C:\test\Old_Adresseliste.csv" ' backupfil
    I = -1
    Open fil1 For Input As #1 ' indlæser rette filen
    Do
        Line Input #1, Rstr
        I = I + 1
        ReDim Preserve Ret(I)
        Ret(I) = Split(Rstr, ";")
    Loop Until EOF(1)
    Close #1
    I = -1
    Open fil2 For Input As #1 ' indlæser adresse filen
    Do
        Line Input #1, Rstr
        I = I + 1
        ReDim Preserve Liste(I)
        Liste(I) = Split(Rstr, ";")
    Loop Until EOF(1)
    Close #1
    Name fil2 As fil3 ' omdøber adressefilen til backup filen

    For I = 1 To UBound(Ret)
        For X = 1 To UBound(Liste)
            If Ret(I)(0) = Liste(X)(0) Then ' tjekker om det er den der skal rettes
                For Y = 0 To UBound(Ret(I))
                    If Not Ret(I)(Y) = " " Then
                        Liste(X)(Y) = Ret(I)(Y)
                    End If
                Next
              Exit For
            End If
        Next
    Next

    Open fil2 For Output As #1 ' gemmer den rettede fil
    For I = 0 To UBound(Liste)
        For X = 0 To UBound(Liste(I))
            Linje = Linje & Liste(I)(X) & ";"
        Next
        Linje = Left(Linje, Len(Linje) - 1)
        Print #1, Linje
        Linje = ""
    Next
    Close

End Sub
Avatar billede pomfrit Nybegynder
02. oktober 2007 - 15:59 #2
Mange tak, det virker :)
Send et svar.
Avatar billede kabbak Professor
02. oktober 2007 - 16:41 #3
et svar ;-))
Avatar billede kabbak Professor
19. juni 2008 - 14:28 #4
skal vi få lukket ??
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester