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.
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.
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.
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.
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
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.