kousman Δημοσ. 29 Δεκεμβρίου 2010 Δημοσ. 29 Δεκεμβρίου 2010 διαβάζω ένα txt αρχείο και " αποθηκεύω " σε δομή τα δεδομένα . πως θα κρατήσω το πρωτο στιγμιότυπο δομης δηλαδη ουσιαστικα την πρωτη γραμμη που εχω διαβασει απο το αρχειο σε ενα head μια λιστας για να ξερω που βρισκονται στην μνημη ωστε να μπορω να προσθεσω-αφαιρεσω δεδομενα ? για c αναφέρομαι..μπορει καποιος να μου κανει ενα παραδειγμα ή εστω καποια λινκ που μπορουν να με βοηθησουν ? thanks
parsifal Δημοσ. 29 Δεκεμβρίου 2010 Δημοσ. 29 Δεκεμβρίου 2010 Χμμμ, μου φαίνεται αρκετά στοιχειώδες, σχεδόν προφανές, αυτό που ρωτάς και φοβάμαι μήπως κάτι δεν έχεις εξηγήσει σωστά και δεν καταλαβαίνω εγώ τί είναι αυτό ακριβώς που ζητείται. Γι' αυτό λοιπόν, τα παρακάτω με κάποια επιφύλαξη: Δηλώνεις στην αρχή του προγράμματός σου έναν pointer προς struct ίδιου τύπου με το struct που χρησιμοποιείς για να αποθηκεύεις τον κάθε κόμβο της λίστας. Αυτός ο δείκτης θα δείχνει στον πρώτο κόμβο της λίστας, αν και όταν τον δημιουργήσεις ποτέ. Εννοείται πως ο δείκτης θα πρέπει να αρχικοποιηθεί σε NULL, για να μπορείς να διακρίνεις μεταξύ κενής λίστας και λίστας στην οποία έχει προστεθεί τουλάχιστον ένας κόμβος. Ας δώσω κι ένα μικρό κομμάτι κώδικα, για επίδειξη των παραπάνω. Έστω λοιπόν ότι έχεις ορίσει struct για την αποθήκευση της κάθε μίας εγγραφής/σειράς αρχείου txt από το οποίο διαβάζεις/οτιδήποτε θέλεις, με όνομα record. Αν π.χ. σε κάθε γραμμή του txt σου υπάρχουν δύο comma separated integers: 1' date='2 3,4 5,6 κλπ [/quote'] το struct θα μπορούσε να είναι κάπως έτσι: > typedef struct record { int num1; int num2; record *next; }; Και στην αρχή του προγράμματός σου, θα έχεις κάτι τέτοιο: > int main(void) { record *head = NULL; ...κλπ... }
kousman Δημοσ. 29 Δεκεμβρίου 2010 Μέλος Δημοσ. 29 Δεκεμβρίου 2010 ωραια μετα που θα διαβασω το αρχειο πως θα κανω το πρωτο στιγμιοτυπο δομης δηλαδη το 1,2 να ειναι ισο με το head ωστε να ξερω που ειναι στην μνημη.και μετα το head να δειχνει στο επομενο κλπ κλπ μεχρι να φτασει στο null δηλαδη eof? μπορει να ειναι προφανη και ευκολα αλλα με εχουν μπερδεψει λιγο...
parsifal Δημοσ. 29 Δεκεμβρίου 2010 Δημοσ. 29 Δεκεμβρίου 2010 Λοιπόν, ας τα πάρουμε από την αρχή. Θα γράψω τον αλγόριθμο που χρειάζεσαι σε φυσική γλώσσα (παραλείποντας εννοείται σκοπίμως τις ιδιαίτερες λεπτομέρειες που γνωρίζεις εσύ αλλά όχι εμείς) και βλέπουμε: 1. Ανοίγεις το αρχείο txt για ανάγνωση 2. Κάνεις έναν βρόχο στον οποίο διαβάζεις μία-μία τις γραμμές του αρχείου μέχρι να φτάσεις σε EOF 3. Για κάθε μία γραμμή που έχει διαβαστεί, κάνεις τις απαραίτητες ενέργειες για να απομονώσεις τα στοιχειώδη δεδομένα που χρειάζεσαι. Tokenization θα είναι αυτό; Κάποια άλλη μετατροπή; Εσύ το ξέρεις 4. Για κάθε set δεδομένων που αντιστοιχούν σε μία γραμμή/record που μόλις διάβασες, θα δημιουργείς με δυναμική δέσμευση μνήμης ένα struct στο οποίο θα αποθηκεύεις τα δεδομένα που μόλις απομόνωσες. Αυτό το struct θα αποτελεί τον εκάστοτε νέο κόμβο που πρόκειται να προστεθεί στη λίστα σου 5. Κάθε κόμβο που μόλις δημιούργησες, Θα τον εισάγεις στη λίστα με την κατάλληλη βοηθητική συνάρτηση εισαγωγής που θα πρέπει να έχεις υλοποιήσει Το «ωστε να ξερω που ειναι στην μνημη» δε με βοηθάει, αφού σου έχω απαντήσει ήδη εμμέσως: Πρόσβαση στη λίστα, για την ακρίβεια στον πρώτο της κόμβο, θα σου δίνει πάντα ο pointer (με όνομα έστω head) που θα δηλώνεις στην αρχή του προγράμματός σου. Αυτός είναι σταθερό σημείο αναφοράς, δεν τον χάνεις. Πρόσβαση στους επόμενους κόμβους της λίστας θα έχεις ξεκινώντας από τον πρώτο κόμβο της λίστας και κάνοντας τη λεγόμενη διάσχιση (traversal). Σε αυτό βοηθάει ο δείκτης *next που έχει ο κάθε κόμβος της λίστας και ο οποίος δείχνει πάντα στον επόμενο κόμβο της λίστας. Κάτι από τα παραπάνω σου λείπει ή δεν έχεις καταλάβει πώς γίνεται. Ποιο είναι αυτό;
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.