Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [CSV][PHP] Dodawanie separatorów
Forum PHP.pl > Forum > Przedszkole
kristaps
Witam, czy jest możliwe napisanie skryptu/funkcji, która uwzględniając formatowanie dodałby separatory? Problem polega na tym, że mam załóżmy fakturę tego typu:

Kod
406 830    GUMA STABIL./P/ SCUDO,ULYSSE 95-            12066                   1     23    15,66       19,26         PLN    
016 436    WODA DEMINERALIZOWANA /1L/                  SPHWD1                  1     23    1,1        1,35         PLN

grz3s
Cytat
Witam, czy jest możliwe napisanie skryptu/funkcji, która uwzględniając formatowanie dodałby separatory?

jest. Co więcej, taka funkcja jest gotowa!
preg_match
kristaps
Witam, ok, ale jak ustalić wzorzec, jeżeli nie ma mowy o stałej liczbie znaków? Jedynie 1, 5 i ostatnia kolumna zawiera określoną ilość znaków. Bo rozumiem, że tak mam rozpoznawać kolumny/grupy na fakturze.
Sephirus
  1. $lines = file('faktura.txt'); // pobranie faktury jako tablicy linii
  2.  
  3. foreach($lines AS &$line) { // separator ustawiłem na ";"
  4. $line = preg_replace('/([0-9]+)\s+([0-9]+)\s+(.+?)\s+([a-z0-9]+)\s+([0-9,]+)\s+([0-9,]+)\s+([0-9,]+)\s+([0-9,]+)\s+([a-z]+)/si','$1;$2;$3;$4;$5;$6;$7;$8;$9',$line);
  5. }
  6.  
  7. file_put_contents('faktura_gotowa.txt',implode("\n",$lines));


It should do the trick jak to mawiają wink.gif
kristaps
Dodawało jeden dodatkowy/zbędny separator w pierwszej kolumnie. 406; 830; zamiast 406 830; No ale oczywiście sobie poradziłem (z przykładu nie wynikało, że to całość). Dziękuję bardzo za pomoc.

Mam jeszcze jeden problem z wyrażeniem regularnym.

Kod
217 672    HAM.SZCZEKI OCTAVIA 1.6-1.9TDI 96-          AH-1060                 1     23    34,36       42,26         PLN

W powyższym przykładzie jest wszystko ok, ponieważ symbol towaru tj. AH-1060 nie zawiera spacji, więc separatory zostały odpowiednio przydzielone. Natomiast niżej jest odwrotna sytuacja.

Kod
220 374    HAM.SZCZEKI FIESTA 90- /180X32/             220 374                 1     23    25,12        30,9         PLN


W tym przypadku dzieli mi fakturę w ten sposób:

Kod
220 374;HAM.SZCZEKI FIESTA 90- /180X32/             220;374;1;23;25,12;30,9;PLN;


Co prawda w pierwszej kolumnie (217 672, 220 374) jest taka sama sytuacja, ale rozwiązałem to w ten sposób: $1 $2;$3;$4;$5;$6;$7;$8;$9;

Usunąłem zakres wyrażania i spróbowałem skorzystać z grupy wzorców, tak samo jak rozwiązane jest to w przypadku nazwy towaru (.+?), jednak pewnie o czymś zapominam, bo całość się sypie.

Witam, więc ma ktoś pomysł jak to rozwiązać?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.