stereotype Δημοσ. 11 Μαΐου 2014 Δημοσ. 11 Μαΐου 2014 Παιδες χρειαζομαι αμεσα τη βοηθεια σας. Γραφω ενα προγραμματακι για τη διπλωματικη μου σε Visual Basic, οντας πρωταρης και οχι βαθια μυημενος. Εχει απλη δομη με ενα μονο Form και το αντιστοιχο Form Class, μεσα στο οποιο δηλωνονται ολες οι μεταβλητες και αναπτυσσεται ο κωδικας. Θελω να δωσω τη δυνατοτητα στο χρηστη να κανει Save/Load με XML De-/Serialization σε ενα σημειο καποιες απαραιτητες μεταβλητες (καμια 30αρια, κυριως string arrays, μερικα απο αυτα multi-dimensional). Ψαχνοντας σε ξενα fora, εχασα τη μπαλα. Το μονο που βρηκα και μπορω να εφαρμοσω ειναι η 2η λυση που προτεινεται εδω http://social.msdn.microsoft.com/Forums/en-US/0357078a-4599-43f4-93a2-bb68b761cccb/save-and-load-an-array Ωστοσο, με αυτον τον τροπο, μπορω να κανω serialize ενα μονο object καθε φορα και σε διαφορετικο .xml file, πραγμα μαλλον επιπονο και καθολου πρακτικο. Εχετε καμια καλυτερη ιδεα για το τι μπορω να κανω??
defacer Δημοσ. 11 Μαΐου 2014 Δημοσ. 11 Μαΐου 2014 Αν βάλεις όλες τις μεταβλητές που σ' ενδιαφέρουν μέσα σ' ένα object ποιό είναι το πρόβλημα; (δεν πάτησα καν το link) 1
stereotype Δημοσ. 11 Μαΐου 2014 Μέλος Δημοσ. 11 Μαΐου 2014 Αν βάλεις όλες τις μεταβλητές που σ' ενδιαφέρουν μέσα σ' ένα object ποιό είναι το πρόβλημα; (δεν πάτησα καν το link) Αυτο ειναι στην ουσια που δεν εχω καταλαβει, τις διαφορες στην ορολογια object/class κλπ. Δηλαδη εχοντας ηδη δηλωμενες τις μεταβλητες, πως θα τις "βαλω" σε ενα object? Και τι θα ειναι αυτο το object? Μπορεις να μου δωσεις ενα παραδειγμα γιατι τα εχω αρκετα μπερδεμενα αυτη τη στιγμη στο μυαλο μου? Σε ευχαριστω για το χρονο σου παντως
defacer Δημοσ. 11 Μαΐου 2014 Δημοσ. 11 Μαΐου 2014 Αν δεν έχεις καταλάβει συγκεκριμένα τη διαφορά object/class πραγματικά πρέπει να πας back to basics. Πρακτικά οποιοδήποτε είδους βιβλίο/tutorial κλπ τα καλύπτει αυτά. Τέλος πάντων, ξέροντας τι μεταβλητές θέλεις να κάνεις serialize και τι αντιπροσωπεύει η κάθε μία θα φτιάξεις μια αντίστοιχη class: Public Class Stuff Public Property Name As String Public Property MoreNames As New List(Of String) End Class Αργότερα όταν έρθει η ώρα να σώσεις θα κάνεις ένα object αυτής της class και θα περάσεις τις τιμές που θέλεις για τα properties που έχει: Dim stuff = new Stuff() With { Name = "Foo", OtherNames = whatever } και θα κάνεις serialize αυτό. 1
stereotype Δημοσ. 11 Μαΐου 2014 Μέλος Δημοσ. 11 Μαΐου 2014 Σε ευχαριστω πολυ για τη βοηθεια, εχεις δικιο. Διαβασα αρκετα "θεωρια" κυριως απο msdn και μπορω να πω οτι τα ξεκαθαρισα στο μυαλο μου. Το υλοποιησα οπως ειπες, απλως στο νεο serializable Class, αντι για properties, εθεσα ολα τα variables που χρειαζομαι απο το Form Class, δηλαδη αυτο: Public Class Form1 Public testvar As Integer ... (Procedures) ... End Class <Serializable()> Public Class Saves Public testvar As Integer = Form1.testvar ... End Class Κι επειτα κανω serialize το Saves. Δουλευει απροβληματιστα, οποτε πιστευω ειναι σωστο. Θα ηθελα να σε ρωτησω κατι τελευταιο. Επειδη εχω αρκετα 2D string arrays, τα οποια δεν ειναι serializable απο οτι διαβασα, υπαρχει κανενας efficient τροπος για να το ξεπερασω αυτο το προβλημα ( για να αποφυγω τη διαδικασια αν γινεται του σπασιματος σε 1D)?
defacer Δημοσ. 12 Μαΐου 2014 Δημοσ. 12 Μαΐου 2014 Κι επειτα κανω serialize το Saves. Δουλευει απροβληματιστα, οποτε πιστευω ειναι σωστο. Ακαδημαϊκά μιλώντας, στον προγραμματισμό αυτό πολύ εσφαλμένη λογική. Δε θα το αναλύσω, απλά θα σου φέρω ένα παράδειγμα. "Για να πολλαπλασιάσεις δυο αριθμούς, γράψε ένα δίπλα στον άλλο για να προκύψει ένας τρίτος, και από τον τρίτο αυτό αριθμό αφαίρεσε 10 για να βρεις το αποτέλεσμα". 1 * 1 => 11 => 1, δουλεύει, άρα σωστό. Συγκεκριμένα τώρα, αυτό που πόσταρες δε γίνεται να δουλεύει (τουλάχιστον αν αυτό είναι όλο) γιατί το "Public testvar As Integer = Form1.testvar" δεν κάνει compile εφόσον το Form1 είναι class και το Form1.testvar δεν είναι shared. Δεν είμαι σίγουρος ποιά ακριβώς είναι η διαφορά ανάμεσα σ' αυτό που έγραψες και σ' αυτό που δουλεύει σε σένα, αλλά υπάρχει κάποια διαφορά. Επίσης γενικά έτσι που το έχεις είναι από αμιγώς προγραμματιστικής οπτικής (πολύ) κακή προσέγγιση αλλά ειλικρινά δε νομίζω ότι πρέπει να σε απασχολεί μιας και ο στόχος εδώ είναι να κάνεις τη δουλειά σου. Just FYI. Για τα arrays που λες, όταν λες 2d εννοείς jagged ή multidimensional? (google για τη διαφορά). Δοκίμασες να το κάνεις; Τι έγινε; Αν δε δούλεψε, ποιός είναι ο κώδικας που δε δουλεύει; 1
stereotype Δημοσ. 12 Μαΐου 2014 Μέλος Δημοσ. 12 Μαΐου 2014 Σε ευχαριστω για τις συμβουλες defacer. Η αληθεια ειναι οτι δεν σπουδαζω προγραμματισμο, αλλα πολιτικος μηχανικος, και προσπαθω να αναπτυξω μια αντιστοιχη εφαρμογη, χωρις βεβαια να εχω το υποβαθρο ενος φτασμενου developer. Κι επειδη δεν διαθετω αρκετο χρονο, χρησιμοποιω συχνα μπακαλικες μεθοδους Επι τουτου τωρα, δουλευει οντως ετσι οπως το εγραψα. Τι θα ηταν ορθοτερο? Να το διατυπωσω οπως ανεφερες, θετοντας στα properties του Class Saves τις τιμες των μεταβλητων που χρειαζομαι απο το Form Class, και μετα να τις επιστρεψω απο το νεο object της Class Saves παλι πισω στο Form Class? H να κοιταξω να κανω shared τα variables που χρειαζομαι? Τα arrays ειναι multidimensional (,) και δεν γινεται να σειριοποιηθουν. Το διασταυρωσα και σε αλλα φορουμ. Ειναι μαλλον εγγενης περιορισμος της vb.net
defacer Δημοσ. 12 Μαΐου 2014 Δημοσ. 12 Μαΐου 2014 Ναι το πιασα αυτό, αφού σου δουλεύει έτσι άστο έτσι. Απλά μάθε και 2-3 βασικά στην πορεία για να μπορείς αν σταματήσει να δουλεύει λόγω κάποιας αλλαγής να το φτιάξεις. Για το serialization το πιο απλό που μπορείς να κάνεις είναι αντί για multidimensional array να έχεις List(of List (of string)): Dim test As List(Of List (Of string)) = New List(Of List (Of string)) From { _ new List(Of string) From {"a", "b"}, _ new List(Of string) From {"c", "d"} _ } Dim serializer As New Xml.Serialization.XmlSerializer(test.GetType) serializer.Serialize(Console.Out, test)
albNik Δημοσ. 12 Μαΐου 2014 Δημοσ. 12 Μαΐου 2014 Αποθηκευσε τα με το BinaryFormatter αντι για XML. Θα ειναι λιγο ακαταλαβιστικο το αρχειο. 1
stereotype Δημοσ. 12 Μαΐου 2014 Μέλος Δημοσ. 12 Μαΐου 2014 Παιδες ευχαριστω ειλικρινα για τη βοηθεια! Το καταφερα τελικα το θεμα, εστω και ανορθοδοξα.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα