Import i eksport danych plikami

Szklany lejek wstawiony w ciemną butelkę

Wymiana plikami jest najprostszą formą integracji i najczęściej psuje się na drobiazgach: kodowaniu, separatorze, formacie daty.

Kodowanie znaków

Pierwsza przyczyna problemów z polskimi znakami. Warto ustalić kodowanie w uzgodnieniu i sprawdzać je przy każdym pliku, a nie zakładać.

Kłopot polega na tym, że plik ze złym kodowaniem wczytuje się bez błędu. Dane wchodzą do bazy z uszkodzonymi znakami i zostają tam, dopóki ktoś ich nie zobaczy na wydruku. Prosta kontrola polega na sprawdzeniu, czy w gotowym imporcie występują znaki spoza oczekiwanego zbioru.

Format dat i liczb

Data zapisana cyframi bywa czytana odwrotnie i to najczęściej kończy się przesunięciem terminów. Liczby mają dwa problemy: przecinek albo kropka jako separator dziesiętny oraz spacja w tysiącach. Osobno trzeba pilnować identyfikatorów zaczynających się od zera i długich numerów, które arkusz kalkulacyjny sam zamienia na zapis wykładniczy. Uzgodnienie formatu w opisie wymiany jest tańsze niż poprawianie skutków.

Separator i cudzysłowy

Średnik czy przecinek, obsługa wartości zawierających separator. Plik wyglądający poprawnie w arkuszu potrafi być rozbity inaczej przez skrypt.

Do tego dochodzą znaki końca wiersza wewnątrz pola — na przykład w adresie albo w opisie towaru. Wiersz rozpada się wtedy na dwa i cała reszta pliku przesuwa się o jedną kolumnę.

Kontrola przed zapisem

Liczba kolumn, typy wartości, obecność pól wymaganych, poprawność identyfikatorów. Sprawdzenie całego pliku przed zapisem czegokolwiek.

Warto dodać kontrolę zdroworozsądkową: plik znacznie mniejszy niż zwykle zwykle oznacza niepełny eksport po stronie nadawcy, a nie nagły spadek sprzedaży. Szerzej o takich regułach mówi tekst o kontroli poprawności danych.

Wiersze błędne

Odkładane do osobnego pliku z opisem przyczyny, a nie pomijane po cichu. Import kończący się komunikatem „gotowe" po wczytaniu połowy danych to najgorszy możliwy wynik.

Plik odrzuconych wierszy powinien dać się poprawić i wczytać ponownie bez ruszania reszty. To najtańsza forma obsługi wyjątków, jaką da się zbudować. Opis przyczyny musi być czytelny dla osoby, która poprawia dane, a nie tylko dla autora skryptu.

Powtarzalność

Ten sam plik wczytany dwa razy nie może utworzyć duplikatów. Klucz rozpoznający rekord istniejący jest warunkiem bezpiecznego powtórzenia.

Trzeba też ustalić moment odczytu. Skrypt czytający katalog przychodzący potrafi trafić na plik jeszcze wgrywany, więc bezpieczniejsze jest przenoszenie pliku pod nazwą tymczasową, co opisuje tekst o przenoszeniu plików między serwerami.

Dziennik przebiegu

Nazwa pliku, liczba wierszy, liczba zapisanych, liczba odrzuconych. Bez tego pytanie „czy dane doszły" jest nierozstrzygalne.

Do dziennika należy też brak pliku o oczekiwanej porze. Cisza po stronie nadawcy wygląda tak samo jak poprawny przebieg bez zmian, a przy wymianie danych z kontrahentem to właśnie brak pliku jest najczęstszą awarią. Warto zapisywać również sumę kontrolną wczytanego pliku — pozwala ustalić, czy powtórna przesyłka zawiera te same dane, czy poprawioną wersję.