CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Najlepszy sposób na konwersję

Najlepszy sposób na konwersję

dział ogólny

Najlepszy sposób na konwersję

Nowy postprzez Corvis » środa, 29 grudnia 2010, 10:18

Witam

Może mi ktoś podpowiedzieć jak skonwertować na datę i godzinę takie coś:
KOD cpp:     UKRYJ  
 int data;
 int godzina;
 data = 101227; // 2010-12-17
 godzina = 154812; // 15:48:12
 
// muszę mieć 2010-12-15 15:48:12
 

Narazie co mi wpadło do głowy to pociąć te zmienne na kawałki 10,12,17 15,48,12 i skorzystać z funkcji DecodeDate(...); Tylko to wszystko chyba mało wydajne będzie przy dużej ilości dat do konwersji


Pozdrawiam
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaChrome

Re: Najlepszy sposób na konwersję

Nowy postprzez Darek_C++ » środa, 29 grudnia 2010, 11:32

Formatu daty nie rumiem. Godzinę możesz tak uzyskać:
KOD cpp:     UKRYJ  
int godzina = 154812;
String sGodzina = IntToStr(godzina) ;
Edit1->Text = sGodzina.SubString(0,2)+":"+ sGodzina.SubString(2,2) +":"+ sGodzina.SubString(4,2) ;
Z tą wydajnością nie przesadzaj chyba, że piszesz grę i operację będą wykonywane w jednej klatce sceny, lub oprogramowanie serwera nastawionego na setki żądań na sekundę.
Avatar użytkownika
Darek_C++
Elektrowied
Elektrowied
 
Posty: 454
Dołączył(a): piątek, 25 lipca 2008, 14:33
Podziękował : 66
Otrzymał podziękowań: 4
System operacyjny: Windows XP Pro SP2
Kompilator: Turbo Explorer C++
Gadu Gadu: 0
    Windows XPFirefox

Re: Najlepszy sposób na konwersję

Nowy postprzez Cyfrowy Baron » środa, 29 grudnia 2010, 11:50

Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Najlepszy sposób na konwersję

Nowy postprzez Corvis » środa, 29 grudnia 2010, 13:03

viewtopic.php?f=2&t=1087

Darek w tym poście opisałem sposób odczytu danych jakiego używam. Więc jak bym pare milionów rekordów tak robił to umre ;) Twój sposób można przyśpieszyć używając funkcji EncodeDate o czym piałem. http://www.delphibasics.co.uk/RTL.asp?Name=EncodeDate

Baronie szukałem ale chyba słabo. Zaraz poczytam te posty.
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaChrome

Re: Najlepszy sposób na konwersję

Nowy postprzez Darek_C++ » środa, 29 grudnia 2010, 16:38

Corvis napisał(a): Więc jak bym pare milionów rekordów tak robił to umre ;)
Czasami się zastanów nad tym co piszesz chyba, że dla ciebie 8 sekund dla 2.000.000 wywołań to jest cała wieczność :D :D :D
KOD cpp:     UKRYJ  
void __fastcall TForm3::Button1Click(TObject *Sender)
{
        float Start = GetTickCount();
        for(int jj = 0; jj < 2000000; jj++)
        {
                int godzina = 154812;
                String sGodzina = IntToStr(godzina) ;
                String godz = sGodzina.SubString(0,2)+":"+ sGodzina.SubString(2,2) +":"+ sGodzina.SubString(4,2) ;
        }
        float End = GetTickCount();

        Edit1->Text =  FloatToStr((End - Start) / 1000) + " s.";
}
Avatar użytkownika
Darek_C++
Elektrowied
Elektrowied
 
Posty: 454
Dołączył(a): piątek, 25 lipca 2008, 14:33
Podziękował : 66
Otrzymał podziękowań: 4
System operacyjny: Windows XP Pro SP2
Kompilator: Turbo Explorer C++
Gadu Gadu: 0
    Windows XPFirefox

Re: Najlepszy sposób na konwersję

Nowy postprzez Corvis » środa, 29 grudnia 2010, 16:40

Ty coś chcesz komuś udowodnić ?? Dobrze wiem co ja pisze, dałem ci linka do posta w którym dyskutowaliśmy na temat parsera do CSV. Jak bym miał to robić twoim sposobem to bym stracił na wydajności. I nawet te zasrane 8 sekund robi mi różnice. (nie mówić już o innych postach gdzie dyskutowaliśmy o tym czy nie będzie potrzebne odczytywanie, konwersja + rysowanie tego w locie)

Ps. Pomijam fakt, że odrazu na początku zaznaczyłem, że te sposób który podałeś mi nie odpowiada i szukam innego.
Ostatnio edytowano środa, 29 grudnia 2010, 16:47 przez Corvis, łącznie edytowano 1 raz
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaChrome

Re: Najlepszy sposób na konwersję

Nowy postprzez Darek_C++ » środa, 29 grudnia 2010, 16:45

Corvis napisał(a):Ty coś chcesz komuś udowodnić ?? Dobrze wiem co ja pisze, dałem ci linka do posta w którym dyskutowaliśmy na temat parsera do CSV.
Nie ma żadnego linka do dyskusji o parserze .
Udowodnić , że wywołanie 2M razy funkcji zajmuje tylko 8 sekund co nie stanowi całej wieczności. Jak masz lepsze sposoby to bardzo dobrze...
Avatar użytkownika
Darek_C++
Elektrowied
Elektrowied
 
Posty: 454
Dołączył(a): piątek, 25 lipca 2008, 14:33
Podziękował : 66
Otrzymał podziękowań: 4
System operacyjny: Windows XP Pro SP2
Kompilator: Turbo Explorer C++
Gadu Gadu: 0
    Windows XPFirefox

Re: Najlepszy sposób na konwersję

Nowy postprzez Corvis » środa, 29 grudnia 2010, 16:49

Zobacz mój 1 post po odpowiedzi cyfrowego barona. 1 linia.

Darek_C++ napisał(a): ... wywołanie 2M razy funkcji zajmuje tylko 8 sekund co nie stanowi całej wieczności
.

Żebym nie musiał patrzeć na wydajność pewnie bym tak zrobił, niestety musze ...
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaChrome

Re: Najlepszy sposób na konwersję

Nowy postprzez Darek_C++ » środa, 29 grudnia 2010, 16:52

Co to jest w ogóle za format zapisu data = 101227; // 2010-12-17 i godziny godzina = 154812; // 15:48:12 ?
Avatar użytkownika
Darek_C++
Elektrowied
Elektrowied
 
Posty: 454
Dołączył(a): piątek, 25 lipca 2008, 14:33
Podziękował : 66
Otrzymał podziękowań: 4
System operacyjny: Windows XP Pro SP2
Kompilator: Turbo Explorer C++
Gadu Gadu: 0
    Windows XPFirefox

Re: Najlepszy sposób na konwersję

Nowy postprzez Corvis » środa, 29 grudnia 2010, 16:53

tam powinno być 2010-12-27 nie mogłem już tego edytować.

YYMMDD
HHMMSS


Edit:

A co autor takiego zapisu miał na myśli nie wiem bo to nie ja pisałem. Ja takie pliki dostałem
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaChrome

Re: Najlepszy sposób na konwersję

Nowy postprzez Darek_C++ » środa, 29 grudnia 2010, 17:08

Skoro jest to zapis 21001229 który nie jest żadnym standardowym zapisem daty [chyba, że się mylę] jak np unix timestramp to i tak Musisz to rozbić na składowe do dalszej operacji co z pewnością zajmuje najwięcej czasu.
Avatar użytkownika
Darek_C++
Elektrowied
Elektrowied
 
Posty: 454
Dołączył(a): piątek, 25 lipca 2008, 14:33
Podziękował : 66
Otrzymał podziękowań: 4
System operacyjny: Windows XP Pro SP2
Kompilator: Turbo Explorer C++
Gadu Gadu: 0
    Windows XPFirefox

Re: Najlepszy sposób na konwersję

Nowy postprzez Cyfrowy Baron » środa, 29 grudnia 2010, 17:21

Darek_c++ napisał(a):Co to jest w ogóle za format zapisu data = 101227; // 2010-12-17 i godziny godzina = 154812; // 15:48:12 ?


To nie jest żaden kodowany format zapisu, to po prostu kolejne liczby daty i godziny i można to tylko parsować tak jak podałeś.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Najlepszy sposób na konwersję

Nowy postprzez Cyfrowy Baron » środa, 29 grudnia 2010, 17:30

Można byt to zrobić odwrotnie do tego co zaproponował Darek_C++:

KOD cpp:     UKRYJ  
 int data;
 int godzina;
 data = 101227; // 2010-12-17
 godzina = 154812; // 15:48:12

 String _date = IntToStr(data);
 _date.Insert("-", 5);
 _date.Insert("-", 3);
 _date.Insert("20", 1);

 String _time = IntToStr(godzina);
 _time.Insert(":", 5);
 _time.Insert(":", 3);


 Edit1->Text = _date + " " + _time;


Nie wiem czy to będzie jednak szybciej.

Za ten post autor Cyfrowy Baron otrzymał podziękowanie od:
Corvis
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Najlepszy sposób na konwersję

Nowy postprzez Darek_C++ » środa, 29 grudnia 2010, 17:33

Cyfrowy Baron napisał(a):To nie jest żaden kodowany format zapisu, to po prostu kolejne liczby daty i godziny i można to tylko parsować tak jak podałeś.
Dlatego dziwię się ironicznemu tonu odpowiedziz Corvis'a "Więc jak bym pare milionów rekordów tak robił to umre".

Jeśli jest na to szybszy sposób to też chętnie się dowiem. To co testowałem czasowo wygląda tak:
KOD cpp:     UKRYJ  
void __fastcall TForm3::Button1Click(TObject *Sender)
{
        String data;
        string str, str2, str3;

        float Start = GetTickCount();
        for(int jj = 0; jj < 2000000; jj++)
        {
                str = "21001229";
                str2 = str.substr(0,4)+"-"+str.substr(4,2)+"-"+str.substr(6,2);
                data = str2.c_str();
        }
        float End = GetTickCount();
        Edit1->Text =  FloatToStr((End - Start) / 1000) + " s.";
        // Czas wykonania srednio 7,188 s.

}

void __fastcall TForm3::Button2Click(TObject *Sender)
{
        String data;
        String str, str2;


        float Start = GetTickCount();
        for(int jj = 0; jj < 2000000; jj++)
        {
                str = "21001229";
                str2 = str.SubString(0,4)+"-"+str.SubString(4,2)+"-"+str.SubString(6,2);
        }
        float End = GetTickCount();
        Edit1->Text =  FloatToStr((End - Start) / 1000) + " s.";
        // CZAS wykonania srednio 8,484 s.
}

W końcu mamy tu 2M operacji w 7 sekund co uważam za bardzo dobry rezultat i tak sie składa, że pewne operacje będą czasochłonne i user programu musi się z tym pogodzić, bop tego się nie pzreskoczy.

----------
CB Jesteś bomba - 2 sekundy 8-)

KOD cpp:     UKRYJ  
void __fastcall TForm3::Button4Click(TObject *Sender)
{
        int data;
        int godzina;
        String _date;
        float Start = GetTickCount();
        for(int jj = 0; jj < 2000000; jj++)
        {

        data = 20101229;
         _date = IntToStr(data);
         _date.Insert("-", 5);
         _date.Insert("-", 8);
        }
        float End = GetTickCount();
        Edit1->Text =  FloatToStr((End - Start) / 1000) + " s.";

         Memo1->Lines->Add(_date);
}
Avatar użytkownika
Darek_C++
Elektrowied
Elektrowied
 
Posty: 454
Dołączył(a): piątek, 25 lipca 2008, 14:33
Podziękował : 66
Otrzymał podziękowań: 4
System operacyjny: Windows XP Pro SP2
Kompilator: Turbo Explorer C++
Gadu Gadu: 0
    Windows XPFirefox

Re: Najlepszy sposób na konwersję

Nowy postprzez Corvis » środa, 29 grudnia 2010, 20:11

Dzięki Baronie, prosteeeeeee jak budowa cepa kurde :-)

Darek ja nie pisze ironicznie tylko, chce mieć wydajny program jak sam widzisz można było zaoszczędzić sporo czasu.
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaChrome


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 3 gości