Baza wiedzy Trawers ERP

Wyrażenia regularne (regex)

1. Wyrażenia regularne Opis ogólny Wyszukiwanie ciągów znaków wg wzorca (szablonu) Sprawdzanie poprawności ciągów znaków 2. W programie Trawers Sprawdzanie poprawności symboli Warunki Query Szukanie w plikach tekstowych Szukanie w treści e-maili Formatowanie wydruków Szukanie w pliku CSV z wyciągiem bankowym 3. Tematy powiązane 4. Aneks. Plik CSV w formacie iPKO Biznes Elixir

1. Wyrażenia regularne

RegEx, regex (en: regular expression) to szablon, który opisuje ciąg znaków. Wyrażenia regularne stosowane są do sprawdzania poprawności ciągów znaków oraz wyszukiwania w tekstach wystąpień wzorca, np.
Wyszukiwanie ciągów znaków wg wzorca (szablonu)
wyrażenie rezultat wyszukania ----------------------------------------------------- a.a ---> adaptacja wymiana zapasami cen. ---> cena ceny licencja ujednolicenie t{2} ---> motto Scott (Re:.){2} ---> Re: Re: Etap [0-9] ---> Etap 1 Etap 2 Etap 132 -----------------------------------------------------
Sprawdzanie poprawności ciągów znaków
* Wyrażenie: ^\d{6}\s{19} Ciąg znaków, np. numer produktu powinien składać się z 6 cyfr i 19 spacji. * Wyrażenie: [0-9]{2}-[0-9]{3} Kod pocztowy, np. 84-230 * Wyrażenie: ^([01]\d|2[0-3]):([0-5]\d)$ Czas w formacie HH:MM, ograniczony do zakresu od 00:00 do 23:59 * Wyrażenie: [0-9]{2}X[0-9]{4}X[0-9]{4}X\sH[0-9]{2} Indeks wyrobu z zapisanym wymiarem w milimetrach. Oznaczenia stosowane w branży hutniczej, np. oznaczenia arkuszy blach, prętów. Oznaczenia płyt meblowych, kabli o różnych długościach, bębnów o różnych rozmiarach. Np. 10X1000X6000 H01. Pierwszy wymiar to grubość, drugi to szerokość, trzeci to długość, H01 to typ. Można dopuścić wiele oznaczeń literowych typów (wymienić w nawiasach kwadratowych), np. D,H,S. Wyrażenie: [0-9]{2}X[0-9]{4}X[0-9]{4}X\s[DHS][0-9]{2} Gdy pierwszym znakiem jest ^, to wprowadzany ciąg nie może zawierać spacji na początku. Np. ^\d{6}\s{19} Stosuje się, gdy numeracja powinna być: 000001, 000002, ... 000101, ... 001001, ... itd. a nie: 1, 2, 3, ... 100, 102, ..., 1001

2. W programie Trawers

W programie Trawers, wyrażenia regularne można stosować:
Sprawdzanie poprawności symboli
* Sprawdzanie poprawności (walidacji) rejestrowanych symboli. Np. numerów serwisowanych produktów: W parametrach SE Serwisowanie produktów podaje się: Szablon numeracji produktu. Wg RegEx [.....] (pole: ValidNr) Gdy numer produktu powinien składać się z 6 cyfr i 19 spacji, to wyrażenie regularne ma postać: ^\d{6}\s{19} Szablon: 6 cyfr + opcjonalnie znak ABCDEFGHI, spacja + 18 spacji można zapisać jako wyrażenie: ^\d{6}[ABCDEFGHI\s]\s{18} Szablon wykorzystywany jest podczas dopisywania serwisowanych produktów. Aby numer produktu wpisywany przez użytkownika był zgodny ze szablonem określonym podczas wdrożenia systemu. System informuje, gdy wpisany numer jest nieprawidłowy. Patrz opis parametrów SE: Parametry SE Serwisowanie produktów
Warunki Query
* Budowanie warunków zapytania query Query. Zapytania wg warunków
Szukanie w plikach tekstowych
* Przeszukiwanie plików tekstowych, np. plików wydrukowych Szukanie w bazie danych Np. przeszukiwanie plików tekstowych o---------------------------o | | [N] Traktuj szukany tekst wprost | Regularne ? : T <-------- [T] Traktuj szukany tekst jako wyrażenie regularne | | | Szukaj : cen. <-------- Szukany tekst | | o---------------------------o
Szukanie w treści e-maili
* Przeszukiwanie treści e-maili E-mail Wbudowana poczta TrEmail
Formatowanie wydruków
* Formatowanie wydruków Funkcje stosujące wyrażenia regularne: ţRegex{} Zwraca fragment tekstu odpowiadający wyrażeniu regularnemu ţDoRegex{} Przekształca tekst na wyrażenie regularne ţIleReg{} Zwraca liczbę ciągów zgodnych z wyrażeniem regularnym Patrz szczegóły: Funkcje TrExtLang
Szukanie w pliku CSV z wyciągiem bankowym
Plik CSV z wyciągiem bankowym może zawierać szczegóły, które identyfikują charakter operacji bankowej: wpłata/wypłata, kontrahent, nr dokumentu (faktury), kwota. Te szczegóły mogą być podane w sposób uporządkowany (strukturalny) i zawierają oznaczenia (kody) wskazujące na rodzaj danych. W takim przypadku można zbudować definicję struktury pliku CSV i wskazać miejsca tych danych (wpłata/wypłata, kontrahent, itd.) Do wskazania miejsc stosuje się wyrażenia regularne (regex). Poniżej podano przykład wykorzystania wyrażeń regularnych (regex) do interpretacji zapisów w CSV. Przykład dotyczy wyciągu bankowego pobranego w formacie iPKO Biznes Elixir. Gdy pobiera się wyciąg z przelewem: Split payment MPP. W wyciągu bankowym, w pliku CSV, można wyszukać treści przelewu: * nr NIP kontrahenta * numer faktury * kwota VAT Przykładowa struktura pliku CSV wyciągu wg formatu iPKO Biznes Elixir. ----------------------------------------------------------------------- AD5 (ad_ttx50) -- Sys ------------- Tabela ------------- ---------- Definicja ------------ OSKN -- Data -- PL Plik ----------------------------------------------------------------------------------------- KB 001 Wyciągi bankowe AA aa ",,N RRRRMMDD WIN wyciag.csv Typ komunikatu 111(uzn) 222(ob 1 C 3 TYPKOM Data 2 D DATA Kwota 3 N 9 0 KWOTA 0.01000000 Treść 1 12 C 35 TRESC1 NIP 12 C 13 NIP Nr faktury 12 C 64 NRFAKTUR Szukaj wg regex: \/INV\/(.*)\/TXT\/ Kwota VAT 12 N 9 2 KWOTAVAT 1.00000000 Szukaj wg regex: \/VAT\/([^\/]*)\/ Nr rachunku kontrahenta 6 C 43 RACHKONT Przykład pliku: 111,20231129,12300,"","","123...","TESTPOL SA ","","","","","/VAT/23,00/IDC/1234567890/INV/FV0002/11/23/TXT/DOWOLNY TEKST" 111,20231129,24600,"","","123...","TESTPOL SA ","","","","","/VAT/46,00/IDC/1234567890/INV/FV0003/11/23/TXT/DOWOLNY TEKST" Patrz dalej szczegółowy opis interpretacji przelewu CSV Split Payment, w formacie iPKO Biznes Elixir (patrz: Aneks)
Patrz też: Opisy wyrażeń regularnych
https://www.regular-expressions.info/ http://grabun.com/wyrazenia-regularne/ http://www.regular-expressions.info/reference.html

3. Tematy powiązane

Formuły i wzory obliczeniowe Składnia wyrażeń filtrujących (filtry) CSV Tabela def CSV Formaty daty, czasu, liczb Raporty i analizy Słowa kluczowe #TrawersERP-Komponenty #Admin-Parametryzacja #Raporty-Generatory

4. Aneks. Plik CSV w formacie iPKO Biznes Elixir

Opis importowania wyciągu bankowego z pliku CSV oraz sposobu interpretacji danych przelewu Split Payment w formacie iPKO Biznes Elixir. 1. Dane w pliku CSV Przykładowy wiersz: ``` 111,20231129,12300,"","","123...","TESTPOL SA ","","","","","/VAT/23,00/IDC/1234567890/INV/FV0002/11/23/TXT/DOWOLNY TEKST" ``` Najważniejsze pola to: | Pozycja | Wartość | Znaczenie | | ------: | -------------------- | ------------------------------------ | | 1 | `111` | typ komunikatu, np. uznanie rachunku | | 2 | `20231129` | data operacji: 29.11.2023 | | 3 | `12300` | kwota operacji | | 12 | `/VAT/23,00/IDC/...` | pełna treść przelewu | W definicji: ``` Typ komunikatu 1 C 3 TYPKOM Data 2 D DATA Kwota 3 N 9 0 KWOTA 0.01000000 Treść 1 12 C 35 TRESC1 ``` liczby `1`, `2`, `3`, `12` wskazują numer kolumny w pliku CSV. Litery oznaczają typ danych: * `C` - tekst, * `D` - data, * `N` - liczba. Przelicznik: ``` 0.01000000 ``` oznacza, że wartość z pliku jest mnożona przez `0,01`. Czyli: ``` 12300 × 0,01 = 123,00 24600 × 0,01 = 246,00 ``` 2. Struktura opisu przelewu MPP Treść przelewu: ``` /VAT/23,00/IDC/1234567890/INV/FV0002/11/23/TXT/DOWOLNY TEKST ``` jest podzielona znacznikami: ``` /VAT/kwota VAT /IDC/NIP kontrahenta /INV/numer faktury /TXT/dodatkowy opis ``` W tym przykładzie: * kwota VAT: `23,00`, * NIP: `1234567890`, * numer faktury: `FV0002/11/23`, * tekst dodatkowy: `DOWOLNY TEKST`. Trawers pobiera te dane z kolumny 12, używając wyrażeń regularnych. 3. Pobranie NIP-u ```regex \/IDC\/([^\/]*)\/ ``` Elementy wyrażenia: * `\/IDC\/` - wyszukaj dosłowny fragment `/IDC/`, * `(` i `)` - wyznaczają część, która ma zostać pobrana, * `[^\/]*` - pobieraj dowolne znaki z wyjątkiem `/`, * końcowe `\/` - zakończ pobieranie na następnym ukośniku. Dla tekstu: ``` /IDC/1234567890/INV/ ``` wynikiem grupy w nawiasach będzie: ``` 1234567890 ``` Czyli do pola `NIP` zostanie wpisany numer: ``` 1234567890 ``` 4. Pobranie numeru faktury ```regex \/INV\/(.*)\/TXT\/ ``` Znaczenie: * `\/INV\/` - znajdź początek numeru faktury, * `(.*)` - pobierz dowolną liczbę dowolnych znaków, * `\/TXT\/` - zakończ na znaczniku `/TXT/`. Dla fragmentu: ``` /INV/FV0002/11/23/TXT/ ``` zostanie pobrane: ``` FV0002/11/23 ``` Tutaj zastosowano `.*`, ponieważ numer faktury może zawierać ukośniki. Nie można więc użyć takiego samego wyrażenia jak dla NIP-u. `.*` jest wyrażeniem zachłannym. Jeżeli w opisie wystąpiłby więcej niż jeden fragment `/TXT/`, może ono pobrać tekst aż do ostatniego wystąpienia `/TXT/`. Gdy silnik regex Trawersa obsługuje zapis nie­zachłanny, bezpieczniejszym wariantem byłoby: ```regex \/INV\/(.*?)\/TXT\/ ``` W typowym komunikacie MPP podany zapis powinien jednak działać prawidłowo. 5. Pobranie kwoty VAT ```regex \/VAT\/([^\/]*)\/ ``` Działa analogicznie jak wyrażenie dla NIP-u: * znajduje `/VAT/`, * pobiera wszystko do następnego `/`. Dla: ``` /VAT/23,00/IDC/ ``` zostanie pobrane: ``` 23,00 ``` Ponieważ pole docelowe ma typ liczbowy: ``` Kwota VAT 12 N 9 2 KWOTAVAT 1.00000000 ``` Trawers interpretuje wynik jako liczbę z dwoma miejscami po przecinku. Przelicznik `1.00000000` oznacza, że kwota nie jest dodatkowo przeliczana: ``` 23,00 × 1 = 23,00 ``` 6. Wynik dla podanych wierszy Dla pierwszego wiersza: ``` 111,20231129,12300,...,"/VAT/23,00/IDC/1234567890/INV/FV0002/11/23/TXT/DOWOLNY TEKST" ``` Trawers powinien odczytać: | Pole | Wynik | | -------------- | -------------- | | Typ komunikatu | `111` | | Data | `29.11.2023` | | Kwota | `123,00` | | NIP | `1234567890` | | Nr faktury | `FV0002/11/23` | | Kwota VAT | `23,00` | Dla drugiego: ``` 111,20231129,24600,...,"/VAT/46,00/IDC/1234567890/INV/FV0003/11/23/TXT/DOWOLNY TEKST" ``` | Pole | Wynik | | -------------- | -------------- | | Typ komunikatu | `111` | | Data | `29.11.2023` | | Kwota | `246,00` | | NIP | `1234567890` | | Nr faktury | `FV0003/11/23` | | Kwota VAT | `46,00` | Najważniejsza zasada jest taka: wszystkie trzy wartości - NIP, numer faktury i VAT - fizycznie znajdują się w kolumnie 12 CSV, a regex wskazuje, który fragment tej kolumny ma trafić do konkretnego pola Trawersa.