21. august 2006 - 15:27
Der er
4 kommentarer og
1 løsning
Sammenligne to pris-filer og spytte diff-fil ud
Hejsa,
jeg står med et lille personligt projekt, som skal løses i VB.
Jeg har to prisfiler - begge med syntaksen:
VARENUMMER;COSTPRIS;SALGSPRIS
Eks: 5395836;55,34;88,23 (ny linie) osv
Den ene fil bliver lavet eksporteres fra en hjemmeside, den anden fil bliver eksporteret fra C5.
Pointen er så, at mit program (som jeg har bygget, har bare ikke den væsentlige algoritme) skal kunne sammenligne hjemmeside-filen med C5-filen.
Hvis programmet detekterer en ændring ud for det pågældende varenummer,
skal den lave en ny linie i en ny og trejde fil med C5-filens oplysninger.
Jeg er ikke den store haj til VB, så jeg skal bruge hjælp til at finde ud af at smide de to filer i to arrays, hvorefter jeg kan sammenligne hvert varenummer med hinanden, og se om de to pågældendes varenummer har ændringer i cost- og salgspris. Hvis der i så fald ér en ændring, så skal linien fra C5-filen blot smides i en ny fil, sammen med alle de andre detekterede ændringer.
Egentlig blot et differense-program, hvor C5-filen bestemmer :)
Nogen der kan hjælpe? :)
Mvh
Sam Høj
22. august 2006 - 14:19
#5
Følende kode er afprøvet i Word VBA-Thisdocument:
Const maxLin = 5000
Dim xsti, c5Arr(maxLin, 3), c5Antal, antalDiff
Sub start()
On Error Resume Next
Close #1
Close #2
Close #3
antalDiff = 0
hentSti
Rem sletter evt gl. diff.txt
Kill xsti + "diff.txt"
hentfil_C5
hentfil_HP
MsgBox ("sammenligning er afsluttet - antal diff.: " + CStr(antalDiff))
End Sub
Private Sub hentfil_HP()
Dim vnr As Long, kost As Single, salg As Single
Open xsti + "HP.txt" For Input As #2
Input #2, overskrifter
While Not EOF(2)
Line Input #2, linie
adskilLinien linie, vnr, kost, salg
findC5linien vnr, kost, salg
Wend
Close #2
End Sub
Private Sub findC5linien(hpVnr, hpKost, hpSalg)
Dim f
For f = 0 To c5Antal - 1
Rem findes varenr i C5
If hpVnr = c5Arr(f, 0) Then
If hpKost <> c5Arr(f, 1) Or hpSalg <> c5Arr(f, 2) Then
skrivDiff c5Arr(f, 0), c5Arr(f, 1), c5Arr(f, 2)
Exit Sub
End If
End If
Next f
End Sub
Private Sub skrivDiff(c5Vnr, c5Salg, c5Kost)
Dim linie
antalDiff = antalDiff + 1
Open xsti + "Diff.txt" For Append As #3
Write #3, c5Vnr; c5Salg; c5Kost
Close #3
End Sub
Private Sub hentfil_C5()
Dim vnr As Long, kost As Single, salg As Single
Open xsti + "c5.txt" For Input As #1
Input #1, overskrifter
While Not EOF(1)
Line Input #1, linie
adskilLinien linie, vnr, kost, salg
c5Arr(c5Antal, 0) = vnr
c5Arr(c5Antal, 1) = kost
c5Arr(c5Antal, 2) = salg
c5Antal = c5Antal + 1
Wend
Close #1
End Sub
Private Function adskilLinien(linie, vnr, kost, salg)
Dim p, lin, count, del
lin = linie + ";"
count = 0
While InStr(lin, ";") > 0
p = InStr(lin, ";")
If p > 0 Then
del = Left(lin, p - 1)
Select Case count
Case 0
vnr = del
Case 1
kost = del
Case 2
salg = del
End Select
lin = Mid(lin, p + 1)
count = count + 1
Else
Stop
End If
Wend
End Function
Private Sub hentSti()
xsti = ActiveDocument.Path
If Right(xsti, 1) <> "\" Then
xsti = xsti + "\"
End If
End Sub
Test DATA:
Sammenligning af pris-filer
C5
VARENUMMER;COSTPRIS;SALGSPRIS
5395836;55,34;88,13
5395837;44,00;77,35
5395830;101,00;125,35
5395831;15,00;27,75
5395839;155,34;188,23
HP
VARENUMMER;COSTPRIS;SALGSPRIS
5395836;55,34;88,23
5395837;44,00;77,35
5395830;100,00;125,35
5395831;15,00;27,7
Diff
5395836,55.34,88.13
5395830,101,125.35