tu przykładowy paragon
NIP 712-26-20-434
(2014-07-23 372316
PARAGON FISKALNY - KOPIA
(PP BAGIETKA CZOSNKOWA 70GD 1 x1,09 1,09DAPP BAGIETKA CZOSNKOWA 70GD
(CIASTKA SOLIDARNOŚĆ 125G B/CUK MAŚLANEA
( 1 x3,99 3,99AA 'CIASTKA SOLIDARNOŚĆ 125G B/CUK MAŚLANEA
)NC SEREK WIEJSKI ŁACIATY 200G NATURALNYD
( 1 x1,79 1,79DA(NC SEREK WIEJSKI ŁACIATY 200G NATURALNYD
(PP BUŁKA KORNSPITZ 70GD 1 x0,89 0,89DAPP BUŁKA KORNSPITZ 70GD
%ZSIADŁE MLEKO KRASNYSTAW 400G MISKAD
( 1 x1,89 1,89DA$ZSIADŁE MLEKO KRASNYSTAW 400G MISKAD
$JOG BIELUCH 400G NATURALNY BIOMLEKD
( 1 x2,19 2,19DA#JOG BIELUCH 400G NATURALNY BIOMLEKD
&NC DŻEM ŁOWICZ 280G MALINOWY NISKOSŁB
( 1 x2,99 2,99BA%NC DŻEM ŁOWICZ 280G MALINOWY NISKOSŁB
(- - - - - - - - - - - - - - - - - - - -
(SPRZEDAŻ OPODATK. A 3,99
(PTU A 23,00 % 0,75
(SPRZEDAŻ OPODATK. B 2,99
(PTU B 8,00 % 0,22
(SPRZEDAŻ OPODATK. D 7,85
(PTU D 5,00 % 0,37
(SUMA PTU 1,34
WHSUMA PLN 14,83BbhH
(00015 #1 3-Błotny Mirosław 06:53
(E9D8748B34B1C5566AE8FCE16A041A4EA5273823
BAM 10417647
(Karta 14,83 PLNDbë ®]
-
zaczynasz od znalezienia linii PARAGON FISKALNY - KOPIA
-
bierzesz następną linię
(PP BAGIETKA CZOSNKOWA 70GD 1 x1,09 1,09DAPP BAGIETKA CZOSNKOWA 70GD
-
obcinasz pierwszy znak
PP BAGIETKA CZOSNKOWA 70GD 1 x1,09 1,09DAPP BAGIETKA CZOSNKOWA 70GD
-
dzielisz linię na pół
PP BUŁKA KORNSPITZ 70GD 2 x0,8
9 1,78DAPP BUŁKA KORNSPITZ 70GD
-
i sprawdzasz czy początek pierwszej linii (np. 5 znaków) zawiera się w drugiej linii
PP BU
9 1,78DAPP BUŁKA KORNSPITZ 70GD
^
-
jeśli tak to bierzesz teraz koniec drugiej linii i szukasz miejsca, gdzie jest on w pierwszej linii (ale od końca)
70GD
PP BUŁKA KORNSPITZ 70GD 2 x0,8
^
Jeśli 5 i 6 true to masz najprostszy przypadek - jedna linia w pliku to jedna pozycja. Masz początek i koniec nazwy (ostatnią literę wywalasz bo to CHYBA stawka jest) czyli PP BUŁKA KORNSPITZ 70G
.
Dla pewności możesz sprawdzić czy teoretyczna nazwa występuje dwa razy w linii i jest rozdzielna.
Następnie z całej linii wywalasz obie nazwy i zostaje Ci 1 x1,09 1,09DA
. Usuwasz spacje z przodu i tyłu, i wszystkie znaki, które są < 32 i > 127 co daje 1 x1,09 1,09DA
. Teraz od początku do x
masz ilość, potem do
masz cenę, potem do litery masz wartość i na końcu stawkę (ostatnie A
ignorujesz).
Jeśli tutaj coś jest nie tak to trzeba sprawdzić konkretny przypadek i zmienić algorytm. UWAGA ilość może być w postaci np. 0,104*kg_
Jeśli pkt 5 jest false to bierzesz następną linię, doklejasz do poprzedniej i powtarzasz procedurę. To ten przypadek
( JOG MLEKOVITA 150G TRUSKAWKOWY POLSKID
( 1 x0,89 0,89DA' JOG MLEKOVITA 150G TRUSKAWKOWY POLSKID
po sklejeniu (obcinasz pierwsze znaki z OBU linii i robisz trim na nich)
JOG MLEKOVITA 150G TRUSKAWKOWY POLSKID1 x0,89 0,89DA' JOG MLEKOVITA 150G TRUSKAWKOWY POLSKID
na pół
JOG MLEKOVITA 150G TRUSKAWKOWY POLSKID1 x0,89
0,89DA' JOG MLEKOVITA 150G TRUSKAWKOWY POLSKID
czy początek się zawiera
JOG ML
0,89DA' JOG MLEKOVITA 150G TRUSKAWKOWY POLSKID
^
i czy koniec się zawiera
LSKID
JOG MLEKOVITA 150G TRUSKAWKOWY POLSKID1 x0,89
^
wyciągasz nazwę
JOG MLEKOVITA 150G TRUSKAWKOWY POLSKI
linia paragonu bez nazwy i znaków specjalnych
1 x0,89 0,89DA
rozbicie na poszczególne dane
ilość 1
cena 0,89
wartość 0,89
stawka D
Jeśli po sklejeniu trzech kolejnych linii nie możesz ich poprawnie sparsować to znaczy błąd w algorytmie :p
A i jeszcze musisz obsłużyć wyjątki, tj. np. anulowanie pozycji #STORNO#