Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [CSV][PHP] Dodawanie separatorów
kristaps
post
Post #1





Grupa: Zarejestrowani
Postów: 279
Pomógł: 36
Dołączył: 1.03.2012

Ostrzeżenie: (0%)
-----


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



Ten post edytował kristaps 5.04.2012, 10:09:17
Go to the top of the page
+Quote Post
grz3s
post
Post #2





Grupa: Zarejestrowani
Postów: 41
Pomógł: 10
Dołączył: 13.01.2009
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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

Ten post edytował grz3s 4.04.2012, 23:43:29
Go to the top of the page
+Quote Post
kristaps
post
Post #3





Grupa: Zarejestrowani
Postów: 279
Pomógł: 36
Dołączył: 1.03.2012

Ostrzeżenie: (0%)
-----


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.

Ten post edytował kristaps 5.04.2012, 12:10:13
Go to the top of the page
+Quote Post
Sephirus
post
Post #4





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


  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


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
kristaps
post
Post #5





Grupa: Zarejestrowani
Postów: 279
Pomógł: 36
Dołączył: 1.03.2012

Ostrzeżenie: (0%)
-----


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ć?

Ten post edytował kristaps 5.04.2012, 15:20:25
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 09:34