Rozpoznawanie formatu wejściowego daty (Delphi XE2)

0

Mam plik wejściowy, w którym w zależności od tego kto na jakim komputerze wygenerował plik - będę miał inny format daty.

Czy poza ręcznym sprawdzaniem jaki jest separator, liczeniem znaków i zakładaniem, że pierwsza para jest dniem, a druga miesiącem (założenie, że nie mamy do czynienia z data w formacie amerykańskim - program działa na terenie polski) - jest jakieś cuś, co potrafi "domyśleć" się aktualnego formatu daty ?

Jest duża szansa, że formatowania dat będą typowo polskie tj: dd-MM-yyyy, dd.MM.yyyy albo yyyy-MM-dd.

Mogę to rzeźbić ręcznie - ale pytanie czy ktoś może już brnął przez taki temat i może zwrócić uwagę na coś, czego ja w tej chwili nie wziąłem pod uwagę.

0

Jak rozumiem plik wejściowy ma datę w postaci stringa tak? Jeśli tak to masz funkcję: TryStrToDate, która zwróci Ci true jeśli uda jej się przekonwertować string na datę

0

Rzeźbienie w brązowym.
Nie możesz ustabilizować programu produkującego dane?

0

W sumie racja - mogę przecież spróbować "typowych" konfiguracji i użyć tej, która się nie wywali (da true).

Dzieki.

AnyKtokolwiek napisał(a):

Rzeźbienie w brązowym.
Nie możesz ustabilizować programu produkującego dane?

Nope. Nie mam na to wpływu.

2

Ciekawe co zrobisz jak dostaniesz dane w formie 07-05-2020 z komputera z kalendarzem amerykańskim, czyli miesiąc-dzień-rok?
Założysz że to 7 maj a będzie to 5 lipiec.
Tak nie powinny działać aplikacje.

0
robertz68 napisał(a):

Ciekawe co zrobisz jak dostaniesz dane w formie 07-05-2020 z komputera z kalendarzem amerykańskim, czyli miesiąc-dzień-rok?
Założysz że to 7 maj a będzie to 5 lipiec.
Tak nie powinny działać aplikacje.

Dlatego pytam czy jest coś, co umie to zrobić z automatu. Sądzę, że zauważyłeś, że wziąłem to pod uwagę i na tą chwilę jedyne co mogę zrobić to założenie, że wiem, że jest to odpalane w Polsce, w teorii na maszynach z polskim systemem operacyjnym.

Albo inaczej. Stwierdzeniem oczywistości niewiele pomogłeś.

0

A zdradż, co za wybitny program produkuje te dane?

0

Akurat nie powinieneś zakładać że lokalizacja jest prawidłowo ustawiona. Jeśli dane pochodzą z jakiejś korporacji to często komputery ustawiane są powiedzmy globalnie.
Wg mnie są dwa rozwiązania:

  1. sprawdź jak wyglądają eksportowane dane, być może jest to robione na bieżąco i będzie mała szansa na otrzymanie danych np. starszych niż kilkudniowe.
  2. być może w danych jest jakiś znacznik który mówi który komputer je eksportuje, jeśli tak to zrób słownik takich komputerów i przypisz, nawet ręcznie odpowiednie formatowanie daty do komputera.

Drugie rozwiązanie wydaje mi się dość skuteczne.

0

Dobra panowie. za klasykiem: "szkoda strzępić ryja". Mam "drutowane" rozwiązanie i tyle musi teraz wystarczyć.

Dziękuję wszystkim za zainteresowanie i zaangażowanie. Wątek można zamknąć.

0

Ogólnie temat daty nie jest prosty ... projekt, w którym obecnie biorę udział łączy kompy z linuxem, kompy z windowsem oraz sprzęt i np sprzęt aktualizuje czas z czasem serwera bazy danych, a ten z gps ale w UTC i przekazanie czasu do kompów powodowało "rozjazdy" także niestety każdy taki problem trzeba rozwiązywać indywodualnie. W delphi jest też funkcja, która konwertuje datę do UTC więc możesz też na tym operować ;)

1

Zaloz ze masz na wejsciu najbardziej zlosliwa date czyli 07.07.07
Teraz w zaleznosci od liczby rekordow albo Ci sie uda z tego wybrnac albo nie.
Jesli jest ich duzo to pewnie trafia sie daty po 12-tym dniu miesiaca i z roku > 2012.

0

@toyman: a czy chociaż znasz zakres możliwych formatów, czy ten plik to po prostu czarna skrzynka z datami w kompletnie nieznanym/losowym formacie, z której musisz wręcz wyczarować poprawne daty? Druga sprawa – czy znasz zakres wartości tych dat (np. przedział od 2010 do 2020), czy znów jest to totalnie niewiadome?

Ogólnie to trudno napisać kod, który zagwarantuje Ci pełną poprawność konwersji.

2

Napisałem, ... dokleja kawałek SQLa z odpowiednim formatowaniem daty. - toyman 26 minut temu

W bazie danych **też ** masz patologię?
To jest chore, co piszesz.

0

Sugeruję napisać sobie proste narzędzie, które przetrawi ten plik i sporządzi statystyki, dzięki czemu będziesz wiedział na czym stoisz przed aktualizacją docelowej bazy danych. Sprawdź ile dat można przekonwertować i ile nie, jakie są zakresy dat, ile jest tych, które da się przekonwertować, ale nie da się rozpoznać w jakim są formacie (np. 05.05.05) itd. Czyli najpierw analiza i rozeznanie w temacie.

Jak już będziesz wiedział jak sprawy się mają to wtedy dobierze się odpowiednie rozwiązanie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1