we_will_rise Δημοσ. 10 Οκτωβρίου 2013 Δημοσ. 10 Οκτωβρίου 2013 Καλησπέρα καλησπέρα... μπαίνω κατευθείαν στο ψητό. Θέλωντας να αποθηκεύσω σε ΒΔ serialized δεδομένα, βρέθηκα στην ανάγκη να χρησιμοποιήσω λίστες που περιέχουν strings, datetimes, floats ή και άλλες λίστες (όπου είναι και το δύσκολο). Ακολουθεί χαρακτηριστικό παράδειγμα... { "myList_list": { "europeanCountries_list": { "Greece_list": { "capitalCity_string": "Athens", "population_int": 11.000.000 } }, "asianCountries_list": { "Japan_list": { "capitalCity_string": "Tokio", "population_int": 127.000.000 }, "China_list": { "capitalCity_string": "Peking", "population_int": 1.351.000.000 } }, "africanCountries_list": { "Egypt_list": { "capitalCity_string": "Cairo", "population_int": 81.000.000 } } } } Χρειάζομαι τον αλγόριθμο για το deserialization o oποίος προφανώς θα τρέχει recursively. To επιθυμητό αποτέλεσμα είναι κάπως έτσι, στο πρώτο τρέξιμο του αλγορίθμου θα έχω ένα μακρύ μακρύ string, το οποίο μετά την πρώτη κοψιά θα μου δώσει 3 string: europeanCities_list : ........μακρύ στρινγκ που περιέχει λίστα... asianCities_lsit: .......μακρύ στρινγκ που περιέχει λίστα.... africanCities_list: ....μακρυ στρινγκ που περιέχει λίστα... Στην συνέχεια το κάθε ένα απ'τα στρινκ θα καλέσει τον ίδιο αλγόριθμο μέχρι να μην έχουμε άλλη εμφωλευμένη λίστα. Το δουλεύω σε C# με regex.split και χρησιμοποιώ το "}," ως διαχωριστικό χωρίς επιτυχία αφού στην πρώτη εμφωλευμένη λίστα κολλάει... Έτσι, ενώ στην περίπτωση πχ της Ευρώπης πάει καλά, στην Ασία μου κόβει το string νωρίτερα (αφού συναντάει νωρίτερα το "},"). Καμιά ιδέα ;;
albNik Δημοσ. 10 Οκτωβρίου 2013 Δημοσ. 10 Οκτωβρίου 2013 Μην κάνεις parse μονος σου το κειμενο, ασε να κανει (de)serialize καποιος formatter (XmlSerializer, BinarySerializer..) Μπορεις να τα έχεις σε μια επιπεδη List<Country> οπου καθε Country εχει Continent, Name, Capital, Population...
defacer Δημοσ. 10 Οκτωβρίου 2013 Δημοσ. 10 Οκτωβρίου 2013 Αυτό που μας δείχνεις είναι σχεδόν JSON. Το έτος είναι 2013. Δεν υπάρχει κανένας απολύτως λόγος να κάνεις δικά σου format με δικό σου parser (πόσο μάλλον όταν υλοποιείται με regular expressions), χρησιμοποίησε κάποιο στάνταρ format και μια έτοιμη βιβλιοθήκη για να το διαχειριστείς. Επίσης, στο άκουσμα της πρότασης "βρέθηκα στην ανάγκη να χρησιμοποιήσω λίστες" προσωπικά με ζώνουν τα φίδια και αρχίζω να σκέφτομαι ότι έχεις πάρει λάθος κατεύθυνση πολύ πριν φτάσεις στο σημείο που είσαι τώρα.
we_will_rise Δημοσ. 10 Οκτωβρίου 2013 Μέλος Δημοσ. 10 Οκτωβρίου 2013 Ναι είναι σχεδόν JSON, και δεν είναι JSON γιατί έτσι ζητήθηκε από άνωθεν... Το "βρέθηκα στην ανάγκη να χρησιμοποιήσω λίστες" ενδεχομένως να είναι κακή διατύπωση από μένα. Ήξερα απ'την πρώτη στιγμή τι ακριβώς ήθελα και ειλικρινά θα με βοηθούσε πάρα πάρα πάρα πολύ μια συμβουλή επί του αλγορίθμου Μην κάνεις parse μονος σου το κειμενο, ασε να κανει (de)serialize καποιος formatter (XmlSerializer, BinarySerializer..) Μπορεις να τα έχεις σε μια επιπεδη List<Country> οπου καθε Country εχει Continent, Name, Capital, Population... Επειδή είναι custom το format, πρέπει να είναι custom και ο formatter :-/ Επίσης οι χώρες ήταν απλώς ένα παράδειγμα, μπορεί να είναι οτιδήποτε σ'αυτό τον βούρκο πληροφοριών
we_will_rise Δημοσ. 15 Οκτωβρίου 2013 Μέλος Δημοσ. 15 Οκτωβρίου 2013 Κατόπιν των παροτρήνσεών σας, υλοποιήθηκε με JSON και πάει γαμιώντας! Σας ευχαριστώ!
sonyxp Δημοσ. 15 Οκτωβρίου 2013 Δημοσ. 15 Οκτωβρίου 2013 Καλησπέρα καλησπέρα... μπαίνω κατευθείαν στο ψητό. Θέλωντας να αποθηκεύσω σε ΒΔ serialized δεδομένα, βρέθηκα στην ανάγκη να χρησιμοποιήσω λίστες που περιέχουν strings, datetimes, floats ή και άλλες λίστες (όπου είναι και το δύσκολο). Ακολουθεί χαρακτηριστικό παράδειγμα... .... Χρειάζομαι τον αλγόριθμο για το deserialization o oποίος προφανώς θα τρέχει recursively. To επιθυμητό αποτέλεσμα είναι κάπως έτσι, στο πρώτο τρέξιμο του αλγορίθμου θα έχω ένα μακρύ μακρύ string, το οποίο μετά την πρώτη κοψιά θα μου δώσει 3 string: europeanCities_list : ........μακρύ στρινγκ που περιέχει λίστα... asianCities_lsit: .......μακρύ στρινγκ που περιέχει λίστα.... africanCities_list: ....μακρυ στρινγκ που περιέχει λίστα... Στην συνέχεια το κάθε ένα απ'τα στρινκ θα καλέσει τον ίδιο αλγόριθμο μέχρι να μην έχουμε άλλη εμφωλευμένη λίστα. Το δουλεύω σε C# με regex.split και χρησιμοποιώ το "}," ως διαχωριστικό χωρίς επιτυχία αφού στην πρώτη εμφωλευμένη λίστα κολλάει... Έτσι, ενώ στην περίπτωση πχ της Ευρώπης πάει καλά, στην Ασία μου κόβει το string νωρίτερα (αφού συναντάει νωρίτερα το "},"). Καμιά ιδέα ;; Δεν έχω ασχοληθεί με Seriallization ιδιαίτερα φίλε μου, ίσως αυτό που θα σου πω δεν είναι αυτό που ψάχνεις... Πριν κάνα μήνα ήθελα να αποθηκεύσω κάποια πράγματα σε XML, χρησιμοποίησα XML Seriallization , έκανα την κλάση Seriallize. Στο Deseriallization απλά έφτιαχνα πίνακα τύπου της κλάσης και έτσι φόρτωνα όλα τα δεδομένα σε πίνακα τύπου κλάσης. http://www.insomnia.gr/topic/497707-xmlserializer-%CF%84%CE%B9-%CF%80%CE%B9%CF%83%CF%84%CE%B5%CF%8D%CE%B5%CF%84%CE%B5/
Mika Δημοσ. 15 Οκτωβρίου 2013 Δημοσ. 15 Οκτωβρίου 2013 Γιατι δεν ειναι json? και γω με την πρωτη ματια αυτη την απορια ειχα. Defacer, αν θες...
Timonkaipumpa Δημοσ. 15 Οκτωβρίου 2013 Δημοσ. 15 Οκτωβρίου 2013 Look closely... missing "[" - "]" και λιγάκι διαφορετική δόμηση/φιλοσοφία.
defacer Δημοσ. 15 Οκτωβρίου 2013 Δημοσ. 15 Οκτωβρίου 2013 και γω με την πρωτη ματια αυτη την απορια ειχα. Defacer, αν θες... Έχει τελείες για formatting στα μεγάλα νούμερα, π.χ. 1.000.000 ενώ σε JSON θα ήταν 1000000. Look closely... missing "[" - "]" και λιγάκι διαφορετική δόμηση/φιλοσοφία. Η δομή (που είναι όντως "περίεργη" με την κακή έννοια στο παράδειγμα) είναι ανεξάρτητη από το format. Αν αφαιρεθούν οι τελείες που λέω παραπάνω είναι valid, άσχετα αν βγάζει νόημα και ποιό είναι αυτό. Χάριν νοσταλγίας, και δεν είναι JSON γιατί έτσι ζητήθηκε από άνωθεν Τις παλιές καλές εποχές αυτό θα το είχα σχολιάσει δεόντως και μετά θα έτρωγα flame ότι το χω καβαλήσει και ποιός είμαι εγώ που θα πώ στους "άνωθεν" ότι λένε μαλακίες και ότι αρνούμαι να το υλοποιήσω έτσι εκτός αν πρόκειται να εκτελέσουν μικρά παιδάκια σε αντίθετη περίπτωση.
we_will_rise Δημοσ. 15 Οκτωβρίου 2013 Μέλος Δημοσ. 15 Οκτωβρίου 2013 Χάριν νοσταλγίας, Τις παλιές καλές εποχές αυτό θα το είχα σχολιάσει δεόντως και μετά θα έτρωγα flame ότι το χω καβαλήσει και ποιός είμαι εγώ που θα πώ στους "άνωθεν" ότι λένε μαλακίες και ότι αρνούμαι να το υλοποιήσω έτσι εκτός αν πρόκειται να εκτελέσουν μικρά παιδάκια σε αντίθετη περίπτωση. Defacer είμαι μαζί σου, αλλά ξέρεις πως πάει... Κάνουμε ό,τι μας λένε!
παπι Δημοσ. 15 Οκτωβρίου 2013 Δημοσ. 15 Οκτωβρίου 2013 Defacer είμαι μαζί σου, αλλά ξέρεις πως πάει... Κάνουμε ό,τι μας λένε!Τι ειναι; ασκηση;
defacer Δημοσ. 15 Οκτωβρίου 2013 Δημοσ. 15 Οκτωβρίου 2013 Defacer είμαι μαζί σου, αλλά ξέρεις πως πάει... Κάνουμε ό,τι μας λένε! Ναι και όχι. Εγώ θα έλεγα "κάνουμε ο,τι χρειάζεται για να γίνει αυτό που θέλει το αφεντικό", που έχει μεγάλη διαφορά. Βέβαια εδώ μπαίνουν και άλλοι παράγοντες, αν είσαι φρέσκος από τη σχολή όντως καλά είναι να κάνεις ο,τι σου λένε και τις όποιες ενστάσεις να τις διατυπώνεις εν είδει απορίας ("γιατί όμως το κάνουμε έτσι αντί να..."). Φαντάσου ότι είσαι χτίστης και σου λέει το αφεντικό ότι θέλει να του χτίσεις μια σάουνα και ότι τη θέλει (το κτίσμα/δωμάτιο δηλαδή) μεταλλική. Ή ότι είσαι πολιτικός μηχανικός και σου λέει ότι θέλει τριώροφη πολυκατοικία αλλά χωρίς κολώνες στη μέση. Τι θα του πεις; Το ίδιο πράγμα είναι κι εδώ με τη διαφορά ότι αν κάνεις αυτό που ζήτησε τα αποτελέσματα δε θα είναι τόσο θεαματικά, παρόλο που θα είναι και πάλι "καταστροφικά". Το λεπτό σημείο εδώ είναι πως για πεις ο,τι πεις θα πρέπει α) να ξέρεις, β) να έχεις εμπιστοσύνη σ' αυτά που ξέρεις και γ) να σε νοιάζει -- αυτά τα θεωρώ δεδομένα μιας και δεν έχει νόημα να μιλάμε για παπατζήδες ή ξερόλες. Τέλος πάντων θα ακούσεις και άλλες απόψεις. Υπάρχει κόσμος (και εδώ στο forum) που μπορεί να φωνάξει έναν ειδικευμένο τεχνίτη -- π.χ. υδραυλικό -- για μια δουλειά και να το θεωρεί λογικότατο να κάνει τουμπεκί σε ο,τι προκύψει γιατί ο υδραυλικός ξέρει τη δουλειά ενώ το "αφεντικό" δεν ξέρει. Και το ίδιο άτομο όταν βρεθεί στη θέση του ειδικευμένου να κάνει τουμπεκί γιατί... το αφεντικό είναι αφεντικό. Εμένα αυτό μου φαίνεται τελείως παράλογο και δε λειτουργώ έτσι. YMMV.
we_will_rise Δημοσ. 15 Οκτωβρίου 2013 Μέλος Δημοσ. 15 Οκτωβρίου 2013 Τι ειναι; ασκηση; Όχι, για την δουλειά είναι. Ναι και όχι. Εγώ θα έλεγα "κάνουμε ο,τι χρειάζεται για να γίνει αυτό που θέλει το αφεντικό", που έχει μεγάλη διαφορά. Βέβαια εδώ μπαίνουν και άλλοι παράγοντες, αν είσαι φρέσκος από τη σχολή όντως καλά είναι να κάνεις ο,τι σου λένε και τις όποιες ενστάσεις να τις διατυπώνεις εν είδει απορίας ("γιατί όμως το κάνουμε έτσι αντί να..."). Φαντάσου ότι είσαι χτίστης και σου λέει το αφεντικό ότι θέλει να του χτίσεις μια σάουνα και ότι τη θέλει (το κτίσμα/δωμάτιο δηλαδή) μεταλλική. Ή ότι είσαι πολιτικός μηχανικός και σου λέει ότι θέλει τριώροφη πολυκατοικία αλλά χωρίς κολώνες στη μέση. Τι θα του πεις; Το ίδιο πράγμα είναι κι εδώ με τη διαφορά ότι αν κάνεις αυτό που ζήτησε τα αποτελέσματα δε θα είναι τόσο θεαματικά, παρόλο που θα είναι και πάλι "καταστροφικά". Το λεπτό σημείο εδώ είναι πως για πεις ο,τι πεις θα πρέπει α) να ξέρεις, β) να έχεις εμπιστοσύνη σ' αυτά που ξέρεις και γ) να σε νοιάζει -- αυτά τα θεωρώ δεδομένα μιας και δεν έχει νόημα να μιλάμε για παπατζήδες ή ξερόλες. Τέλος πάντων θα ακούσεις και άλλες απόψεις. Υπάρχει κόσμος (και εδώ στο forum) που μπορεί να φωνάξει έναν ειδικευμένο τεχνίτη -- π.χ. υδραυλικό -- για μια δουλειά και να το θεωρεί λογικότατο να κάνει τουμπεκί σε ο,τι προκύψει γιατί ο υδραυλικός ξέρει τη δουλειά ενώ το "αφεντικό" δεν ξέρει. Και το ίδιο άτομο όταν βρεθεί στη θέση του ειδικευμένου να κάνει τουμπεκί γιατί... το αφεντικό είναι αφεντικό. Εμένα αυτό μου φαίνεται τελείως παράλογο και δε λειτουργώ έτσι. YMMV. 1) Είμαι όντως φρέσκος απ'τη σχολή και είναι η πρώτη μου δουλειά. 2) Στην συγκεκριμένη περίπτωση, το ξεκίνησε κάποιος πριν από μένα και ζητήθηκε να συνεχιστεί με τον τρόπο που ξεκίνησε. Ο λόγος που δεν επέμεινα εξ'αρχής σε JSON είναι ότι δεν το είχα κάνει ποτέ πριν και συνεπώς το να επέμενα σε κάτι που ο ίδιος δεν το είχα κάνει ποτέ πριν ενδεχομένως θα με εξέθετε. Μετά όμως απ'αυτά που είπατε εσείς και αφού διάβασα μερικά tutorials και έκανα ένα μικρό παραδειγματάκι μόνος μου σπίτι, το πρότεινα, εγγυήθηκα ότι "γίνεται", πήρα το ΟΚ και το έκανα! 3) Τώρα σχετικά με το πόσο δίνω σημασία στο τι λέει το αφεντικό, προφανώς δεν αναφέρομαι στον εργοδότη, αλλά στον project manager απ'τα χέρια του οποίου περνάει ο κώδικάς μου... Προφανώς, πάνω σε μια διαφωνία, το δικό του "trust me, I've done it before" θα μετρήσει και όχι το δικό μου, ακόμα και είναι η μεγαλύτερη μπαρούφα που έχω ακούσει ποτέ.
defacer Δημοσ. 16 Οκτωβρίου 2013 Δημοσ. 16 Οκτωβρίου 2013 Πολύ καλά το χειρίστηκες νομίζω, και ειδικά αν είσαι πολύ πολύ φρέσκος το χειρίστηκες άψογα, μπράβο! Αυτά που έγραψα ήταν περισσότερο φιλοσοφία παρά πρακτικά πράγματα -- εξάλλου λείπουν πολλές πληροφορίες για να μπορεί να είναι οποιοσδήποτε κατηγορηματικός επί του θέματος (π.χ. εσύ "προφανώς" αναφέρεσαι στον PM και όχι στον εργοδότη, αλλά εμείς δεν ξέρουμε αν είσαι μισθωτός ή freelancer). Το μόνο που μου κάνει εντύπωση από τα παραπάνω είναι ότι, όπως το καταλαβαίνω, βρέθηκε κάποιος "από πάνω" να πει πως καλύτερα καστομιά παρά στάνταρ JSON. Αν όντως έγινε έτσι, αυτός ο κάποιος είτε ξέρει κάτι που δεν ξέρω εγώ είτε δε θα έπρεπε να είναι "από πάνω" από κανέναν.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα