alkisg Δημοσ. 10 Ιουνίου 2006 Δημοσ. 10 Ιουνίου 2006 Έτσι που τα λες εγώ καταλαβαίνω ότι δε χρειάζεσαι casting ούτε buffers. Η δομή της πληροφορίας σου στη μνήμη μπορεί ΠΑΝΤΑ να είναι μια λίστα από struct. Μην μπερδεύεσαι με το πως γράφονται στο αρχείο, στη μνήμη δε βολεύει να αναπαρασταθεί με τον ίδιο τρόπο. Π.χ. δηλώνεις struct { char name[20], surname[20], address[80]; int something; double date; enum DIATAKSH permutation; } Το τελευταίο, το permutation μπορείς να το βάλεις προαιρετικά εάν θες να γράφονται με την ίδια σειρά που τα διάβασες. Εάν το αρχείο σου αποτελείται από εγγραφές 5 πεδίων σε οποιαδήποτε διάταξη, τότε αναγκαστικά (εκτός κι αν δουλεύεις με variants ή objects) κάποια στιγμή θα γίνουν κάποια if, αυτά με τα οποία θα βρεις τι τύπος είναι κάθε δεδομένο. Εγώ σου προτείνω αυτά τα if να γίνουν κατά την ανάγνωση του αρχείου, οπότε στη συνέχεια να δουλεύεις με "κανονικές" μεταβλητές χωρίς να χρειάζεσαι διαρκώς casting.
kostas111 Δημοσ. 11 Ιουνίου 2006 Μέλος Δημοσ. 11 Ιουνίου 2006 file Sta, para para polu endiaferonta auta pou les... kai mallon etsi tha ginei... (twra den kserw akoma an doulepsei...) ara ama kserw oti diavazw 100 bytes pou mporei na einai diaforoi typoi kanw: for(i=o;i<99;i++) fread(data,sizeof(data),1,fp); opou data:unsigned char data[100]; apo to arxeio kai meta me th memcpy kanw afta pou les swsta? se eyxaristw para polu! file alksig kai esi kala ta les apla thewreis oti kserw ta 5 pedia apla den kserw th diataksi egw den kserw kan ta pedia.apla kserw oti einai 5 alla den kserw ti.. (alkis eimaste kai stin idia polh.... ) Sas eyxaristw PARA polu...
kostas111 Δημοσ. 11 Ιουνίου 2006 Μέλος Δημοσ. 11 Ιουνίου 2006 .... kai meta apo merikes wres douleias doulepse!!! DOULEPSE!!! me to unsigned char kai meta memcpy opws eipe o "sta"!! elpizw na einai ok twra kai na mhn prepei na to ksanaallazw!! eyxaristw para polu!!!
Moi! Δημοσ. 11 Ιουνίου 2006 Δημοσ. 11 Ιουνίου 2006 να ρωτησω κατι αλλα μη με βρισετε!τι ειναι τα δυαδικα αρχεια κ που μπορω να διαβασω κατι για αυτα?
kostas111 Δημοσ. 11 Ιουνίου 2006 Μέλος Δημοσ. 11 Ιουνίου 2006 Γιατι να σε βρίσουμε?Εγω τόσες ερωτήσεις έκανα και τα παιδιά μου απαντήσανε... ναναι καλά!! τα δυαδικά αρχεία είναι αρχεία όπου γράφουμε οποιονδήποτε τύπο δεδομένων χρησιμοποιώντας δυαδική αναπαράσταση και όχι σαν κείμενο. Στα αρχεία κειμένου για να γράψουμε και να διαβάσουμε κάτι πρέπει να μετατραπεί από δυαδική μορφή σε ancII και το αντίστροφο ενώ με δυαδικά αρχεία δεν γίνεται τέτοιες μετατροπές τύπων δεδομένων. Αυτή είναι μια "μπακαλίστικη" περιγραφή των δυαδικών αρχείων... Τωρα.. γιατι τα χρειάζεσαι για να σου πουμε τι να διαβάσεις... Για παράδειγμα αν θέλεις να κάνεις κάτι σε προγραμματισμό με C κάθε βιβλίο της C έχει ειδικό κεφάλαιο για Αρχεία κειμένου και δυαδικά αρχεία. Εκεί μπορεις να μάθεις περισσότερα όσο αναφορά τη C... Αν θέλεις κάτι άλλο πες μας να βοηθήσουμε αν γνωρίζουμε!
Sta Δημοσ. 11 Ιουνίου 2006 Δημοσ. 11 Ιουνίου 2006 ara ama kserw oti diavazw 100 bytes pou mporei na einai diaforoi typoi kanw: for(i=o;i<99;i++) fread(data' date='sizeof(data[i']),1,fp); opou data:unsigned char data[100]; apo to arxeio kai meta me th memcpy kanw afta pou les swsta? Δεν ξέρω πώς το έκανες τελικά, εγώ προτείνω το εξής: > fread(data,1,sizeof data, fp); και μετά μπορείς να κάνεις memcpy().
kostas111 Δημοσ. 11 Ιουνίου 2006 Μέλος Δημοσ. 11 Ιουνίου 2006 o idios tropos den einai?Apla perneis esi 100 bytes me th mia... xm... mallon pio swsto einai etsi pou to les, egw to ekana me for alla ok tha dw... mporei kai na allaxtei... ;)
Sta Δημοσ. 11 Ιουνίου 2006 Δημοσ. 11 Ιουνίου 2006 Ο ίδιος τρόπος είναι, απλώς έτσι όπως το έχεις γράψει δεν είναι σωστό, αφού το πρώτο όρισμα της fread δεν είναι δείκτης στο buffer που θέλεις να αποθηκευσεις. Σωστότερο θα ήταν το εξής: > for (...) fread(data+i,1,1,fp);
kostas111 Δημοσ. 11 Ιουνίου 2006 Μέλος Δημοσ. 11 Ιουνίου 2006 esi swsta ta les... alla apo oti vlepw egw exw kanei akoma pio mpakalika for(j=0;j<100;j++) fread(&data[j],1,1,fp); (prin sto post ksexasa na grapsw to &) alla doulepse... kai ksereis oti douleuei den to peirazoume tha to peiraza mono gia to prohgoumeno tropo xwris for!!
Sta Δημοσ. 11 Ιουνίου 2006 Δημοσ. 11 Ιουνίου 2006 Αυτό είναι σωστό μιας και: &data[j]===data+j. Ούτε εγώ θα το πείραζα, απλώς είναι σημαντικό (ιδιαίτερα στη C) να γράφεις σωστά γιατί κάποια πράγματα μπορεί να δουλεύουν τώρα και όχι αύριο (λόγω undefined behaviour).
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.