Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Κάτι σαν overwrite

Îåêßíçóå áðü ôï ìÝëïò pantelee. Τελευταία δημοσίευση από το μέλος pantelee στις 18-05-2007, 16:51. Υπάρχουν 2 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  15-05-2007, 00:19 31794

    Κάτι σαν overwrite

    Στον παρακάτω κώδικα δημιουργώ (ας πούμε ότι δεν υπάρχει ήδη) ένα αρχείο στο οποίο κάνω καταχωρήσεις τιμών στις θέσεις 11, 12, 13.

    Dim S As Single, D As Date, L As Long
    Dim FF As Integer
    FF = FreeFile

    S = 4.34
    D = "27/01/1976"
    L = 1987654

    Open App.Path & "\File.txt" For Random Access Write As #FF Len = 8
      Put #FF, 11, S
      Put #FF, 12, D
      Put #FF, 13, L
    Close #FF

    Το αρχείο είναι πλέον 13 * 8 = 104 byte. (*)

    Αν στη συνέχεια κάνω την ίδια δουλειά στο υπάρχον αρχείο, αλλά αυτή τη φορά στις θέσεις 1, 2, 3 τότε το αρχείο θα ανοίξει, θα ενημερωθεί στις θέσεις 1, 2, 3 σύμφωνα με τις τιμές που έδωσα και ... θα παραμείνει 104 byte και όχι 3 * 8 = 24 byte. (*)

    Από τη μια αυτό που γίνεται μπορεί να φανεί πολύ χρήσιμο, αλλά από την άλλη μπορεί να φανεί άχρηστο και προβληματικό.

    Βρίσκομαι στη δεύτερη περίπτωση.
    Το απλό που σκέφτομαι είναι να διαγράψω πρώτα το αρχείο και στη συνέχεια να δημιουργήσω ένα καινούργιο αρχείο στην ίδια διαδρομή. Δε μου φαίνεται όμως δόκιμο.
    Τι λέτε;

    Ευχαριστώ
    Παντελής

    (*) δεν πρέπει να 'ναι απόλυτο αυτό που λέω. Είναι όμως βοηθητικό ώστε να διατυπώσω την ερώτησή μου.
  •  15-05-2007, 00:32 31795 σε απάντηση της 31794

    Απ: Κάτι σαν overwrite

    Ποιά ακριβώς είναι η ερώτηση? Εφόσον ανοίγεις ένα αρχείο για Random Access, μπορείς να γράψεις σε όποιο record θέλεις. Αν θέλεις να γράψεις από την αρχή, άνοιξε το αρχείο με άλλο τρόπο.

    Έτσι κι αλλιώς, η χρήση των Open, Put, Close κλπ είναι εξαιρετικά περιορισμένη. Για αρχεία κειμένου, το FileSystemObject είναι πολύ ισχυρότερο από αυτές τις εντολές. Όπου χρειάζεται η αποθήκευση δομημένης πληροφορίας, είναι πολύ ευκολότερο να χρησιμοποιήσεις μία βάση δεδομένων. Οι εντολές αυτές υπάρχουν πλέον για ιστορικούς λόγους.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  18-05-2007, 16:51 31937 σε απάντηση της 31795

    Απ: Κάτι σαν overwrite

    Παναγιώτης Καναβός:
    Ποιά ακριβώς είναι η ερώτηση?

    Όπως και στο παράδειγμα, θέλω να ανοίγω ένα αρχείο και το μέγεθός του να ορίζεται από τις καταχωρήσεις που θα κάνω (όπως γίνεται όταν το αρχείο δημιουργείται για πρώτη φορά) και όχι μόνο να αυξάνεται όταν οι καταχωρήσεις που κάνω το ξεπερνούν (που κάτι τέτοιο γίνεται όταν το αρχείο υπάρχει πριν το Open).

    Με την γραμμή
    Open App.Path & "\File.txt" For Output Access Write As #1
    το αρχείο ουσιαστικά διαγράφεται. Αλλά με την
    Open App.Path & "\File.txt" For Random Access Write As #1
    όχι.

    Θα ήθελα και να χρησιμοποιήσω Random Access και να διαγραφτεί πρώτα το αρχείο. Σκέφτηκα να το διαγράψω πρώτα με ξεχωριστή γραμμή και μετά να βάλω την γραμμή του Open. Ρωτάω αν υπάρχει κάποιος πιο σωστός τρόπος.

    Όσο για το FileSystemObject ενώ το έχω δουλέψει, δεν γνωρίζω ανάλογό του με το Put - Get #F, RecNumber, Var όπου διαβάζεις συγκεκριμένη εγγραφή. Και για τη βάση δεδομένων έχω δρόμο ακόμα (δεν μπορώ να ορίσω κάποια πράγματα ακόμη σε RunTime που θα μου χρειάζονταν).
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems