georginos1989 Δημοσ. 14 Ιανουαρίου 2011 Μέλος Share Δημοσ. 14 Ιανουαρίου 2011 Οι ημερομηνιες που ειναι μονοψηφιες γίνετε να γινουν δυψηφιες και αυτες? Δλδ να προσθέσουμε ενα 0 στην αρχή? Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Directx Δημοσ. 14 Ιανουαρίου 2011 Share Δημοσ. 14 Ιανουαρίου 2011 Η μορφή του TDateTime ως αλφαριθμητικού μπορεί να καθοριστεί με την βοήθεια της ρουτίνας .FormatString. Έτσι για παράδειγμα αν θέλουμε οι όροι μέρα & μήνας της ημερομηνίας να παρουσιάζονται σε διψήφια μορφή (nn) ενώ του έτους σε τετραψήφια (nnnn), αρκεί να εισάγουμε ως παράμετρο της .FormatString το αλφαριθμητικό "dd/mm/yyyy": > [..] const UnicodeString MyDateFrm = "dd/mm/yyyy"; wcout << "Today = " << Now().FormatString(MyDateFrm).w_str()<<endl; wcout << "-7 days = " << IncDay(Now(), -7).FormatString(MyDateFrm).w_str()<<endl; wcout << "-1 month= " << IncMonth(Now(), -1).FormatString(MyDateFrm).w_str()<<endl<<endl; [..] ΕΞΟΔΟΣ: > Today = 14/01/2011 -7 days = 07/01/2011 -1 month= 14/12/2010 Για περισσότερες λεπτομέρειες σχετικά με τις παραμέτρους που δέχεται η TDateTime.FormatString θα πρέπει να συμβουλευτείς την τεκμηρίωση του C++ Builder. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
georginos1989 Δημοσ. 3 Μαΐου 2011 Μέλος Share Δημοσ. 3 Μαΐου 2011 #include <vcl.h> #include <DateUtils.hpp> #include <iostream.h> #pragma hdrstop #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <tchar.h> //--------------------------------------------------------------------------- using namespace std; #pragma argsused int main() { cout << "Today = " << Now().DateString().w_str()<<endl; cout << "-7 days = " << IncDay(Now(), -7).DateString().w_str()<<endl; cout << "-1 month= " << IncMonth(Now(), -1).DateString().w_str()<<endl<<endl; cout << "Press Enter to exit"; getch(); } Εγραψα το παραπανω αλλα πεταει linker error [iLINK32 Error] Error: Unresolved external '__fastcall Strhlpr::UnicodeFree(System::UnicodeString&)' referenced from C:\PROGRAM FILES\EMBARCADERO\RAD STUDIO\7.0\LIB\DEBUG\VCLE.LIB|ustring [iLINK32 Error] Error: Unresolved external '__fastcall Dateutils::IncDay(const System::TDateTime, const const int)' referenced from C:\DOCUMENTS AND SETTINGS\GIORGOS\ΤΑ ΈΓΓΡΑΦΆ ΜΟΥ\RAD STUDIO\PROJECTS\DEBUG\FILE4.OBJ [iLINK32 Error] Error: Unresolved external '__fastcall Sysutils::Now()' referenced from C:\DOCUMENTS AND SETTINGS\GIORGOS\ΤΑ ΈΓΓΡΑΦΆ ΜΟΥ\RAD STUDIO\PROJECTS\DEBUG\FILE4.OBJ [iLINK32 Error] Error: Unresolved external '__fastcall Sysutils::IncMonth(const System::TDateTime, int)' referenced from C:\DOCUMENTS AND SETTINGS\GIORGOS\ΤΑ ΈΓΓΡΑΦΆ ΜΟΥ\RAD STUDIO\PROJECTS\DEBUG\FILE4.OBJ [iLINK32 Error] Error: Unresolved external '__fastcall Sysutils::DateToStr(const System::TDateTime)' referenced from C:\PROGRAM FILES\EMBARCADERO\RAD STUDIO\7.0\LIB\DEBUG\VCLE.LIB|datetime [iLINK32 Error] Error: Unresolved external '__fastcall Strhlpr::UnicodeAssign(System::UnicodeString&, System::UnicodeString&)' referenced from C:\PROGRAM FILES\EMBARCADERO\RAD STUDIO\7.0\LIB\DEBUG\VCLE.LIB|ustring Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Directx Δημοσ. 3 Μαΐου 2011 Share Δημοσ. 3 Μαΐου 2011 Όπως έχω γράψει στο παρελθόν, αν θέλεις να χρησιμοποιείς την VCL σε προγράμματα κονσόλας θα πρέπει να μαρκάρεις το "Use VCL" στο New Console Application wizard διαφορετικά θα έχεις πρόβλημα κατά το linking. Επίσης αφού στο cout περνάς w_str() θα πρέπει να χρησιμοποιήσεις την Unicode εκδοχή του δηλαδή την wcout ή να αλλάξεις το w_str() σε c_str() (ANSI). Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
georginos1989 Δημοσ. 3 Μαΐου 2011 Μέλος Share Δημοσ. 3 Μαΐου 2011 Χωρίς to use vcl δεν γίνετε με καποιον αλλο τρόπο? Επειδή χρησιμοποιώ στο πρόγραμμα το το std::string με την vcl μηπως υπάρξει προβλημα? Το c_str() δεν δουλευει με το cout Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Directx Δημοσ. 3 Μαΐου 2011 Share Δημοσ. 3 Μαΐου 2011 Χωρίς to use vcl δεν γίνετε με καποιον αλλο τρόπο? Όχι, δεν μπορείς να χρησιμοποιήσεις classes της VCL δίχως να δηλώσεις "Use VCL" στο New Console Application wizard. Επειδή χρησιμοποιώ στο πρόγραμμα το το std::string με την vcl μηπως υπάρξει προβλημα? Όχι, δεν υπάρχει πρόβλημα καθώς άλλο το VCL String και άλλο το C++ STL std::string. Το c_str() δεν δουλευει με το cout Σε εμένα δουλεύει σωστά, ως: > cout << "Today = " << Now().DateString().c_str()<<endl; Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
georginos1989 Δημοσ. 3 Μαΐου 2011 Μέλος Share Δημοσ. 3 Μαΐου 2011 Βασικά θα με βόλευε να παιρνουμε την σημερινη ημερομηνια και να την αποθηκευουμε σε ενα string Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Directx Δημοσ. 3 Μαΐου 2011 Share Δημοσ. 3 Μαΐου 2011 Μπορείς να το κάνεις ως (ASCII): >string stl_string = Now().DateString().c_str(); ή (Unicode) >wstring stl_string = Now().DateString().w_str(); οπότε από εκεί και πέρα την διαχειρίζεσαι ως ένα απλό STL string. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
georginos1989 Δημοσ. 3 Μαΐου 2011 Μέλος Share Δημοσ. 3 Μαΐου 2011 Μπορείς να το κάνεις ως (ASCII): >string stl_string = Now().DateString().c_str(); ή (Unicode) >wstring stl_string = Now().DateString().w_str(); οπότε από εκεί και πέρα την διαχειρίζεσαι ως ένα απλό STL string. Εμένα δε νιώθει [bCC32 Error] File4.cpp(14): E2285 Could not find a match for 'string::basic_string(const string&)' Full parser context File4.cpp(14): parsing: int main(int,char * *) Μονο το wstring δουλευει Αυτό είναι ίδιο με το απλό string ή θα υπάρχει κάποιο πρόβλημα? Γιατι στο προγραμμα χρησιμοποιώ τα std::string wstring stl_string = Now().DateString().w_str(); std::string s; s=stl_string; Μαλλον οχι ε? Για αν γραψω το παραπανω παεταει αυτο [bCC32 Error] File4.cpp(16): E2285 Could not find a match for 'operator string::=(wstring)' Full parser context File4.cpp(14): parsing: int main(int,char * *) Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Directx Δημοσ. 3 Μαΐου 2011 Share Δημοσ. 3 Μαΐου 2011 Φτιάξε ένα νέο Console Project, μαρκάρισε την χρήση της VCL όπως σου υπέδειξα και πάνω στο νέο, καθαρό, σκελετό (template) που θα δημιουργήσει ο C++ Builder χτίσε τον κώδικα σου και όλα θα δουλέψουν κανονικά. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
georginos1989 Δημοσ. 5 Μαΐου 2011 Μέλος Share Δημοσ. 5 Μαΐου 2011 Το κανα απο την αρχή όπως είπε χωρις να πειραξω τπτ μονο προσθετα πραγματα //--------------------------------------------------------------------------- #include <vcl.h> #include <DateUtils.hpp> #include <iostream> #pragma hdrstop #include <tchar.h> //--------------------------------------------------------------------------- #pragma argsused using namespace std; int _tmain(int argc, _TCHAR* argv[]) { string stl_string = Now().DateString().c_str(); cout << "Today = " << Now().DateString().c_str()<<endl; wcout << "-7 days = " << IncDay(Now(), -7).DateString().w_str()<<endl; wcout << "-1 month= " << IncMonth(Now(), -1).DateString().w_str()<<endl<<endl; wcout << "Press Enter to exit"; cin.get(); return 0; } //--------------------------------------------------------------------------- χτυπαει στην πρωτη γραμμη [bCC32 Error] File4.cpp(18): E2285 Could not find a match for 'string::basic_string(const string&)' Full parser context File4.cpp(16): parsing: int main(int,char * *) και στην πρωτη cout εμφανιζει οτι ναναι Εγω χρησιμοποιώ embarcadero 2010 εσύ τι χρησιμοποιείς και τρέχει Μονο αυτό δουλευει wstring st2_string = Now().DateString().w_str(); Βρήκα εγώ τρόπο για να μετατρέπω το wstring se string.. Ειναι ο παρακατω #include <vcl.h> #pragma hdrstop #include <DateUtils.hpp> #include <iostream> #include <tchar.h> #include <string> #include <algorithm> //--------------------------------------------------------------------------- using namespace std; #pragma argsused std::string WStringToString(const std::wstring& s) { std::string temp(s.length(), ' '); std::copy(s.begin(), s.end(), temp.begin()); return temp; } int _tmain(int argc, _TCHAR* argv[]) { wstring s = Now().FormatString("yyyy-mm-dd").w_str() ; string s1; s1=WStringToString(s); cout<<s1<<endl; wcout << "Press Enter to exit"; cin.get(); return 0; } //--------------------------------------------------------------------------- Δουλευει μια χαρα αυτος στη main αλλά όταν περνας τις συναρτησεις σε unit μεσα σε καποια κλάση χτυπαει ένα λαθος κατι για _Αserte καπως έτσι Μηπως υπάρχει καποιος άλλος τρόπος να παιρνω την ημερομηνια σε string σε μορφή yyyy/mm/dd ? Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Directx Δημοσ. 5 Μαΐου 2011 Share Δημοσ. 5 Μαΐου 2011 [..]Εγω χρησιμοποιώ embarcadero 2010 εσύ τι χρησιμοποιείς και τρέχει [..] Μονο αυτό δουλευει wstring st2_string = Now().DateString().w_str(); [..] Μηπως υπάρχει καποιος άλλος τρόπος να παιρνω την ημερομηνια σε string σε μορφή yyyy/mm/dd ? Χρησιμοποιώ τον C++ Builder 2009 και C++ Builder 6.0 όπου εκεί ο παραπάνω κώδικας εκτελείται επιτυχώς όμως ... Όσον αφορά το σφάλμα του compiler, συμπεριέλαβε την εντολή "#include <string>" στις δηλώσεις headers του προγράμματος διότι βλέπω ότι δεν την έχεις συμπεριλάβει αλλά δηλώνεις το string σκέτο και πες μου αν το πρόβλημα διορθωθεί! --- Από εκεί και πέρα, η πιο απλή μέθοδος μετατροπής του Date σε yyyy/mm/dd υπό τις παρούσες συνθήκες είναι (διότι θα μπορούσες να το κάνεις πιο απλά ως αλλάζοντας το "mm/dd/yyyy" σε "yyyy/mm/dd"): > #include <vcl.h> #include <DateUtils.hpp> #include <iostream> #pragma hdrstop #include <tchar.h> //--------------------------------------------------------------------------- #pragma argsused using namespace std; int _tmain(int argc, _TCHAR* argv[]) { char szDate[bUFSIZ]; sprintf(szDate, "%.4d/%.2d/%.2d", YearOf(Now()), MonthOf(Now()), DayOf(Now())); cout << szDate; cin.get(); return 0; } και αν δεν δουλέψει αυτό, τότε σε Unicode: > #include <vcl.h> #include <DateUtils.hpp> #include <iostream> #pragma hdrstop #include <tchar.h> //--------------------------------------------------------------------------- #pragma argsused using namespace std; int _tmain(int argc, _TCHAR* argv[]) { wchar_t wszDate[bUFSIZ]; swprintf(wszDate, L"%.4d/%.2d/%.2d", YearOf(Now()), MonthOf(Now()), DayOf(Now())); wcout << wszDate; cin.get(); return 0; } Και εδώ μια ρουτίνα που επιστρέφει string ως yyyy/mm/dd: > //--------------------------------------------------------------------------- #include <vcl.h> #include <sstream> #include <iostream> #include <iomanip> #include <DateUtils.hpp> #pragma hdrstop #include <tchar.h> //--------------------------------------------------------------------------- using namespace std; string _ReturnDate(void); #pragma argsused int _tmain(int argc, _TCHAR* argv[]) { cout << "_ReturnDate: " << _ReturnDate() << endl; cin.get(); return 0; } //--------------------------------------------------------------------------- string _ReturnDate(void) { stringstream ss; TDate Today = (TDate)Now(); ss << setfill('0') << YearOf(Today) << "/" << setw(2) << MonthOf(Today) << "/" << setw(2) << DayOf(Today); return ss.str(); } Τέλος, δοκίμασε και αυτόν τον κώδικα και πες μου αν στην έκδοση 2010 λειτουργεί: > //--------------------------------------------------------------------------- #include <vcl.h> #include <DateUtils.hpp> #include <iostream> #include <string> #pragma hdrstop #include <tchar.h> //--------------------------------------------------------------------------- #pragma argsused using namespace std; int _tmain(int argc, _TCHAR* argv[]) { wstring stl_string = Now().DateString().w_str(); wcout << "Today = " << stl_string<<endl; wcout << "-7 days = " << IncDay(Now(), -7).DateString().w_str()<<endl; wcout << "-1 month= " << IncMonth(Now(), -1).DateString().w_str()<<endl<<endl; string asciistr = Now().DateString().c_str(); cout << "ASCII = " << asciistr<<endl<<endl; wcout << "Press Enter to exit"; cin.get(); return 0; } //--------------------------------------------------------------------------- Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
georginos1989 Δημοσ. 5 Μαΐου 2011 Μέλος Share Δημοσ. 5 Μαΐου 2011 Καλώς.... Ευχαριστώ πολύ ελπίζω κάποιο να δουλέψει... Θα χεις νέα το απόγευμα που θα τα δοκιμάσω... Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
georginos1989 Δημοσ. 5 Μαΐου 2011 Μέλος Share Δημοσ. 5 Μαΐου 2011 Δουλευουν όλα εκτός απο την τελευταία περίπτωση που χτυπαει [bCC32 Error] File4.cpp(22): E2285 Could not find a match for 'string::basic_string(const string&)' Full parser context File4.cpp(17): parsing: int main(int,char * *) Σε console Με χρήση της vcl δουλεύουν... Απλά με προβληματίζει το γεγονός επειδή το project έχει στηθεί χωρίς χρήση της vcl. Βασικά τωρα νομιζω δεν θα υπαρχει πρόβλημα γιατί αν αλλάξουμε ΄μονο το unit της main και το κανουμε με vcl και προσθέσουμε στο προτζεκτ τα units των κλασσεων δε νομιζω να υπαρχει προβλημα Σε λιγο καιρό που θα προστεθεί gui δεν ξέρω αν θα πεχτει κανένα πρόβλημα.. Τι λες? επίσης στο προηγούμενο παραδειγμα στην απαντηση #56 το σφαλμα που βγαζει όταν τα περασω μέσα στο προτζεκτ που εχουμε κανει ειναι [bCC32 Error] autoargs.h(45): E2268 Call to undefined function '_ASSERTE_' Full parser context main.cpp(29): #include c:\program files\embarcadero\rad studio\7.0\include\vcl\DateUtils.hpp DateUtils.hpp(15): #include c:\program files\embarcadero\rad studio\7.0\include\vcl\System.hpp System.hpp(840): #include c:\program files\embarcadero\rad studio\7.0\include\vcl\sysclass.h sysclass.h(84): #include c:\program files\embarcadero\rad studio\7.0\include\vcl\sysvari.h sysvari.h(1434): #include c:\program files\embarcadero\rad studio\7.0\include\autoargs.h autoargs.h(34): class TAutoArgsBase autoargs.h(79): decision to instantiate: Variant & operator TAutoArgsBase::[](int) const --- Resetting parser context for instantiation... autoargs.h(41): parsing: Variant & operator TAutoArgsBase::[](int) const Βασικά και αυτά που μου δειξες εσυ μόλις τα δοκιμασα στο προτζεκτ και χτυπαει στο ιδιο λαθος Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Directx Δημοσ. 5 Μαΐου 2011 Share Δημοσ. 5 Μαΐου 2011 Δουλευουν όλα εκτός απο την τελευταία περίπτωση που χτυπαει [bCC32 Error] File4.cpp(22): E2285 Could not find a match for 'string::basic_string(const string&)' Full parser context File4.cpp(17): parsing: int main(int,char * *) Σε console Με χρήση της vcl δουλεύουν... Απλά με προβληματίζει το γεγονός επειδή το project έχει στηθεί χωρίς χρήση της vcl. Βασικά τωρα νομιζω δεν θα υπαρχει πρόβλημα γιατί αν αλλάξουμε ΄μονο το unit της main και το κανουμε με vcl και προσθέσουμε στο προτζεκτ τα units των κλασσεων δε νομιζω να υπαρχει προβλημα Σε λιγο καιρό που θα προστεθεί gui δεν ξέρω αν θα πεχτει κανένα πρόβλημα.. Τι λες? επίσης στο προηγούμενο παραδειγμα στην απαντηση #56 το σφαλμα που βγαζει όταν τα περασω μέσα στο προτζεκτ που εχουμε κανει ειναι [bCC32 Error] autoargs.h(45): E2268 Call to undefined function '_ASSERTE_' Full parser context main.cpp(29): #include c:\program files\embarcadero\rad studio\7.0\include\vcl\DateUtils.hpp DateUtils.hpp(15): #include c:\program files\embarcadero\rad studio\7.0\include\vcl\System.hpp System.hpp(840): #include c:\program files\embarcadero\rad studio\7.0\include\vcl\sysclass.h sysclass.h(84): #include c:\program files\embarcadero\rad studio\7.0\include\vcl\sysvari.h sysvari.h(1434): #include c:\program files\embarcadero\rad studio\7.0\include\autoargs.h autoargs.h(34): class TAutoArgsBase autoargs.h(79): decision to instantiate: Variant & operator TAutoArgsBase::[](int) const --- Resetting parser context for instantiation... autoargs.h(41): parsing: Variant & operator TAutoArgsBase::[](int) const Βασικά και αυτά που μου δειξες εσυ μόλις τα δοκιμασα στο προτζεκτ και χτυπαει στο ιδιο λαθος Όπως σου εξήγησα από την αρχή, όταν καλείς οτιδήποτε έχει να κάνει με VCL οφείλεις στην περίπτωση που πρόκειται για Project κονσόλας να ορίζεις την χρήση της στις ρυθμίσεις του (δεν φτάνει ένα απλό #include <vcl.h>) διαφορετικά δεν πρόκειται να λειτουργήσει τίποτε σωστά. Από εκεί και πέρα, όταν πας σε GUI αναγκαστικά η VCL θα συμπεριληφθεί και εφόσων αυτά που έχεις ήδη φτιάξει δουλεύουν όταν συμπεριλάβεις ρητά στο Project σου την χρήση της, θα δουλέψουν και εκεί. -- Σχετικά με την _ASSERTE_, φαίνεται ανεπίτρεπτο σφάλμα βαθιά στα header των βιβλιοθηκών του μεταφραστή, υποθέτω λοιπόν ότι πρέπει να προέρχεται από διάφορες αλχημείες κατά την συγγραφή του κώδικα / project (χρήση ή μη σωστή δήλωση της VCL κλπ). Αλλά καθώς δεν διαθέτω τον C++ Builder 2010 δεν μπορώ να πω τίποτε περισσότερο από αυτό. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.