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

 

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

Aναγνωση αρχειου με C γραμμή - γραμμή

Îåêßíçóå áðü ôï ìÝëïò dimcal. Τελευταία δημοσίευση από το μέλος mashua στις 15-02-2011, 01:15. Υπάρχουν 6 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  13-02-2010, 20:00 57129

    Aναγνωση αρχειου με C γραμμή - γραμμή

    Γεια σας θελω την βοηθεια σας στο εξης ζητημα . Εχω ενα αρχειο το οποιο θελω να διαβασω και να τοποθετω καθε γραμμη σε ενα αλφαριθμητικο για να το συγκρινω με καποιο αλλο . Γραφω σε Αnsi C .Oσες φορες το εχω δοκιμασει χαρακτηρα χαρακτηρα ψαχνοντας το \n  εχω προβλημα στη τοποθετηση καθε νεου χαρκτηρα στο αλφαριθμητικο που θελω να βαλω ολη τη γραμμη του αρχειου .Υπαρχει καποιος τροπος η συναρτηση να διαβαζω κατευθειαν την γραμμή??? Σας ευχαριστω εκ των προτερων

     

     

     

  •  13-02-2010, 20:24 57130 σε απάντηση της 57129

    Απ: Aναγνωση αρχειου με C γραμμή - γραμμή

    Κάτι μου λέει ότι η ερώτηση αφορά φοιτητική άσκηση. Ο σκοπός της άσκησης δεν είναι να διαβάσεις το αρχείο αλλά να μάθεις ποιές είναι οι συναρτήσεις της C, πως χρησιμοποιούνται και κυρίως, που να τις βρεις. Καλύτερα να δοκιμάσεις να τη λύσεις μόνος σου αντί να ψάχνεις για μία έτοιμη λύση. Δεν πρόκειται για κάτι δύσκολο. Το μόνο το οποίο μπορεί να σου δημιουργήσει δυσκολίες είναι ότι στα Windows η κάθε γραμμή καταλήγει σε CR+LF (\r\n) και όχι μόνο σε LF (\n).

    Από εκεί και πέρα, ANSI C δεν υπάρχει. Ή μάλλον, ANSI C λέγανε άτυπα το πρώτο πρότυπο ANSI που είχε βγει το '89 (C89) και το όνομα ξέμεινε στα βιβλία που διδάσκονται στα πανεπιστήμια. Από τότε έχει βγει το C99 και στα σκαριά είναι το C1X. Περιττό να πω ότι όλοι σχεδόν οι σύγχρονοι compilers υποστηρίζουν το C99. Θέλει λίγη προσοχή λοιπόν μήπως χρησιμοποιήσεις κατά λάθος κάποιο feature της C99 ενώ ο καθηγητής ζητάει C89.

    Από την άλλη, και τα δύο πρότυπα από το ANSI βγήκανε. Οπότε τί πρόβλημα έχετε κύριε καθηγητά? ANSI ζητήσατε, ANSI σας γράψαμε Stick out tongue


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  13-02-2010, 20:53 57131 σε απάντηση της 57130

    Απ: Aναγνωση αρχειου με C γραμμή - γραμμή

    A !!!!!!!!!!! ευχαριστω για τον \r\n τωρα που το ξανακοιταζω αυτο ειναι που φταιει ισως ... Θα το δοκιμασω και θα σας πω ...
  •  14-02-2010, 23:17 57139 σε απάντηση της 57131

    Απ: Aναγνωση αρχειου με C γραμμή - γραμμή

    Πηγα να δοκιμασω στον compiler στα windows την αλλαγη γραμμής με τον εξής κωδικα :

    #include <stdio.h>


    main()
    {
         
    FILE *fp;
    fp=fopen("ok.txt","r");
    int ch;
    int c=0;

    ch=fgetc(fp);

    while(!feof(fp)){
                    
         if (ch=='\r\n')
           c++;
                   
          putchar(ch);
           ch=fgetc(fp);  
             
    }
    printf("%d",c);
    }    

    ομως το c ηταν 0 . Γιατι εγινε αυτό ; Δεν εκανα κατι σωστα ;

  •  16-02-2010, 03:28 57147 σε απάντηση της 57139

    Απ: Aναγνωση αρχειου με C γραμμή - γραμμή

    Το \r\n είναι δύο escape characters: carriage return (\r) & linefeed (\n).Αν προσπαθείς να τους διαβάσεις σαν ένα χαρακτήρα λογικά θα αποτυγχάνει.
  •  20-02-2010, 00:08 57215 σε απάντηση της 57147

    Απ: Aναγνωση αρχειου με C γραμμή - γραμμή

    Εγω θα σου πρωτινα να ασχοληθεις με (f)printf/(f)scanf. Ειναι αρκετα βολικες, αν κατσεις και μαθεις απ'εξω τα formats. 
    πχ για να διαβασεις μια σειρα, απλα γραφεις fscanf(fp,"%[^\n]s",str);  
  •  15-02-2011, 01:15 63259 σε απάντηση της 57139

    Απ: Aναγνωση αρχειου με C γραμμή - γραμμή

    αρχικά, χρησιμοποιείς ενα int (το ch) για να κρατήσεις ενα χαρακτήρα, κάτι το οποίο δουλεύει αν χρησιμοποιήσεις την printf με %c και όχι με %d, αλλά τώρα γενικά δεν σε βοηθάει,  το προβλημά σου είναι εδω: if (ch=='\r\n'), δεν μπορείς στη C να συγκρίνεις ενα χαρακτήρα με άλλους 2 (τους \r\n) με απλο τελεστή σύγκρισης '==' αλλα πρέπει να χρησιμοποιήσεις την συναρτηση int strcmp(char*,char*)
    όπου θα δώσεις σαν ορίσματα τα 2 αλφαριθμητικά που θες να συγκρίνεις και ανάλογα αν το πρώτο είναι μεγαλύτερο θα σου επιστρέψει 'κάτι σε int' > 0 , αν το δεύτερο είναι μεγαλυτερο θα σου επιστρέψει 'κάτι σε int' < 0 και τέλος, αν τα δύο αλφαριθμητικά είναι 'ίσα' δλδ ίδια θα σου επιστρέψει 0.

    Αντικατέστησε το if( ch=='\r\n') με if(! srtcmp(ch,"\r\n")) πρόσεξε όχι '\r\n' αλλά "\r\n".Το '!' μπαίνει ώστε καθε φορα που βρίσκεις μια απο την αλληλουχία "\r\n" να αυξάνεις το c.
    Hope this works, αλλα μετά απο ένα χρόνο μάλλον το έχεις λύσει το θέμα...Stick out tongue

Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems