Avatar billede petert Forsker
15. februar 2014 - 13:16 Der er 5 kommentarer og
1 løsning

kcoverterer *.txt til *.csv

Hej alle
Er der nogle der har et bud på hvordan jeg kan gøre dette.
Opgaven er følgende.
Jeg modtager 2 filer hver måned med opdateringer, af priser og rabatter.
Fil 1. Excel med priser 25000stk. rekord.
fil 2. rabat fil (txt)
Min opgave er at lave en skabelon/måde at konverterer rabat txt filen til csv fil og placerer rabat satsen i Excel filen.
jeg viser her eksempler filerne og hvordan det skal bruges.
fil 2
1107200LK INSTALLATIONSMATERIEL                    280
1108200LK BELYSNING                                220
1109200LK INTELLIGENTE SYSTEMER                    300
1109300LK IHC WIRELESS                              300
1121000SAMLEMUFFER OG TRÆSKRUER                    100
1130000FORSKRUNINGER                                360
Det er kun ciffer 2-5 der er rabatgruppen eks 1072 i første rekord.

Dette skal konverteres til
1,1072,00,LK INSTALLATIONSMATERIEL,                    280
1,1082,00,LK BELYSNING,                                220

så skal jeg på en eller anden måde kunne køre en opdatering af mit Excel ark vedr. priser og rabatter.
Jeg kan sende et eksempel på et ark hvis nogle har et bud på hvordan dette gøres smartest.
Avatar billede natkatten Mester
15. februar 2014 - 15:35 #1
Er der altid 7 cifre i starten? Og er de 25000 rækker alle struktureret som i de viste eksempler. I så fald burde konverteringen være relativ simpel.

Du er velkommen til at sende til natkatten snabela gmail dot com så skal jeg nok kigge på det.
Avatar billede petert Forsker
16. februar 2014 - 07:25 #2
Ja det er de.
1107200LK INSTALLATIONSMATERIEL                    280
1108200LK BELYSNING                                220
1109200LK INTELLIGENTE SYSTEMER                    300
1109300LK IHC WIRELESS                            300
1121000SAMLEMUFFER OG TRÆSKRUER                    100
1130000FORSKRUNINGER                              360
Det er kun ciffer 2-5 der er rabatgruppen eks 1072 i første rekord.
Avatar billede natkatten Mester
16. februar 2014 - 08:06 #3
I så fald tror jeg, at det kan håndteres inde fra Excel vha. Tekst til kolonner (Excel 2007). Brug 'Fast bredde' idet du tilpasser. således at det passer med strukturen af dine data.
Avatar billede bvirk Guru
16. februar 2014 - 12:37 #4
Det kan også laves uden at bruge regneark. Følgende vba løser det på filniveau og vba'en kan ligge i excel eller hvilket som helt office program der har vba. Faktisk kan det, med mindre omskrivning, laves som vb script.

'depends on reference: 'Microsoft Scripting Runtime'

Function FileSystemObject(): Set FileSystemObject = New FileSystemObject: End Function

Sub ExampleOfTxt2CsvUse(fnWOExt)
    array2file fnWOExt & ".csv", fix2csv(file2array(fnWOExt & ".txt"))
End Sub

Sub array2file(fn, arr)
    Dim i
    With FileSystemObject.OpenTextFile(fn, 2, True)
        For Each i In arr: .WriteLine i: Next: .Close: End With
End Sub

Function fix2csv(arr)
    Dim i
    For Each i In arr
        add2list fix2csv, insertAt(replaceFirstRev(rReplace(i, "  ", " "), " ", ","), ",", 2, 6, 8): Next
End Function

Function file2array(fn)
    With FileSystemObject.OpenTextFile(fn, 1)
        While Not .AtEndOfStream
            add2list file2array, .ReadLine: Wend: .Close: End With
End Function

Function rReplace(container, searchStr, repl)
    rReplace = container
    While InStr(rReplace, searchStr)
        rReplace = Replace(rReplace, searchStr, repl)
    Wend
End Function

Function insertAt(str, char, ParamArray pos())
    Dim p, offset%
    insertAt = str
    For Each p In pos
        insertAt = Left(insertAt, p + offset - 1) & char & mid(insertAt, p + offset)
        offset = offset + 1
    Next
End Function

Function replaceFirstRev(container, searchStr, repl)
    Dim p
    p = InStrRev(container, searchStr)
    replaceFirstRev = Left(container, p - 1) & repl & mid(container, p + Len(searchStr))
End Function

Sub add2list(V, i)
    On Error Resume Next
    ReDim Preserve V(UBound(V) + 1)
    If err.Number = 13 Then ReDim V(0)
    If IsObject(i) Then Set V(UBound(V)) = i Else V(UBound(V)) = i
End Sub
Avatar billede Slettet bruger
16. februar 2014 - 13:52 #5
Hvis en formelløsning foretrækkes, så med

1107200LK INSTALLATIONSMATERIEL                    280

i A1, indsæt følgende formler:

B1: =--VENSTRE(A1:A1;1)
C1: =--(MIDT(A1;2;4)&","&MIDT(A1;6;2))
D1: =SLÅ.OP(9^9;--HØJRE(A1;RÆKKE($1:$90)))

Kopier formlerne nedad.
Avatar billede natkatten Mester
23. februar 2014 - 18:42 #6
Et svar til brug for lukning af spørgsmålet.
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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