Προς το περιεχόμενο

Εισαγωγή text file στη c


makis89

Προτεινόμενες αναρτήσεις

Αυτό δεν γίνεται και με μία if ; Ποιός ο λόγος να χρησιμοποιήσω επιπλέον συνάρτηση ;

 

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

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αυτό δεν γίνεται και με μία if ; Ποιός ο λόγος να χρησιμοποιήσω επιπλέον συνάρτηση ;

 

Μπορεί να γίνει με μια if αν ο compiler σου είναι συμβατός με POSIX και προσφέρει την ρουτίνα access("filename",0) της βιβλιοθήκη io.h, η οποία επιστρέφει 0 όταν υπάρχει το αρχείο "filename" ή -1 όταν δεν υπάρχει -το ",0" ζητά από την access να ελέγξει για την ύπαρξη του αρχείου, μάλιστα γλυτώνεις και από το άγχος το αρχείο να μην έχει read-permissions...

 

πχ.

>
fopen("myfile.txt",(access("myfile.txt")==-1)?"w":"r+");

 

Τώρα αν θέλεις να εξασφαλίσεις πως ο κώδικας σου θα γίνεται compile σε κάθε ANSI-C compiler προφανώς η χρήση της ρουτίνας access είναι επίφοβη, καθώς μπορεί να μην υπάρχει, οπότε γράφεις μια ρουτίνα σαν του Bokarinho.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

η λύση του bokarinho είναι σωστή και δε σου επιβαρύνει το πρόγραμμα. Μη σε τρόμάζει οτι μεγαλώνει ο κώδικας. Καλύτερα σταθερό και δομημένο πρόγραμμα από το να γλυτώσεις μερικά bytes εκτελέσιμου.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • 8 μήνες μετά...

Έχω ένα παρόμοιο πρόβλημα με την διαφορά ότι για την άσκηση δεν μου επιτρέπετε να χρησιμοποιήσω έτοιμες συναρτήσεις για σύγκριση συμβολοσειρών (str*) και την fscanf.

 

Το αρχείο που διαβάζω έχει την μορφή integer\t"string"\t"string" (Π.χ. 1 "DAdADAF" "SDASDA") και πρέπει να εισάγω τον Integer και τα strings σε μία δομή της μορφής:

struct{

int pos

char firststr[50]

char secondstr[50]}

 

καμία βοήθεια;

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Μπορείς να χρησιμοποιήσεις την fread και μετά στο string που θα σου δώσει την sscanf. Όσο για την σύγκριση των char*, μπορείς πολύ εύκολα να φτιάξεις μια δικιά σου συνάρτηση που απλώς συγκρίνει κάθε γράμμα των δύο char*, αν είναι διαφορετικά επιστρέφει π.χ. 0 και στο τέλος του loop της σύγκρισης επιστρέφει 1. Θα στην έγραφα αλλά δεν το επιτρέπουν οι κανόνες.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Μπορείς να χρησιμοποιήσεις την fread και μετά στο string που θα σου δώσει την sscanf. Όσο για την σύγκριση των char*, μπορείς πολύ εύκολα να φτιάξεις μια δικιά σου συνάρτηση που απλώς συγκρίνει κάθε γράμμα των δύο char*, αν είναι διαφορετικά επιστρέφει π.χ. 0 και στο τέλος του loop της σύγκρισης επιστρέφει 1. Θα στην έγραφα αλλά δεν το επιτρέπουν οι κανόνες.

 

μπορείς να μου στείλεις ένα Pm ;

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αν χρησιμοποιήσεις την sscanf αντί της fscanf πάλι θα σε κόψουν διότι είναι ακριβώς το ίδιο πράγμα!!

 

Η άσκηση μάλλον απαιτεί:

  • Να διαβάσεις έναν έναν τους χαρακτήρες
  • Να δημιουργείς ένα δεύτερο string με τους χαρακτήρες που διαβάζεις
  • Όταν βρίσκεις τον \t χαρακτήρα να επεξεργάζεσαι το δεύτερο string που έφτιαξες και να ξανααρχίζεις από την αρχή.

 

Αν πάλι κατάλαβα λάθος πες την άσκηση και θα δώσουμε κάποιες κατευθύνσεις

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αν χρησιμοποιήσεις την sscanf αντί της fscanf πάλι θα σε κόψουν διότι είναι ακριβώς το ίδιο πράγμα!!

Μα άμα είπαν μόνο για την fscanf και όχι για την sscanf δικό τους πρόβλημα =P Bέβαια ο δικός σου τρόπος είναι πιο σίγουρος.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αν έχω καταλάβει καλά ο σκοπός της άσκησης είναι να τους μάθουν να δουλεύουν με πίνακες χαρακτήρων. Οπότε όποια έκδοση της scanf και να χρησιμοποιήσει δεν είναι ο τρόπος που θέλει ο καθηγητής. Anyway...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αν χρησιμοποιήσεις την sscanf αντί της fscanf πάλι θα σε κόψουν διότι είναι ακριβώς το ίδιο πράγμα!!

 

Η άσκηση μάλλον απαιτεί:

  • Να διαβάσεις έναν έναν τους χαρακτήρες
  • Να δημιουργείς ένα δεύτερο string με τους χαρακτήρες που διαβάζεις
  • Όταν βρίσκεις τον \t χαρακτήρα να επεξεργάζεσαι το δεύτερο string που έφτιαξες και να ξανααρχίζεις από την αρχή.

 

Αν πάλι κατάλαβα λάθος πες την άσκηση και θα δώσουμε κάποιες κατευθύνσεις

 

σωστός...

 

Έχω καταφέρει να διαβάσω μία μία τις γραμμές του αρχείου και να τις αποθηκεύσω σε έναν πίνακα. Πως θα διαβάζω έναν-έναν τους χαρακτήρες;

 

Για δώστε καμιά βοήθεια!!!

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...