No Quarter Δημοσιεύτηκε Δεκέμβριος 6, 2004 #1 Κοινοποίηση Δημοσιεύτηκε Δεκέμβριος 6, 2004 Πρώτο μου posting εδώ. Μπαίνω αμέσως στο ψητό: Έχω μια εργασία για τη σχολή μου σε 'C' Language. Ένας φίλος μου συνέστησε αυτό το site για βοήθεια. Ακολουθεί η εργασία (στα αγγλικά - Συγνώμη αλλά δεν μεταφράζω γιατί μπορεί να κάνω κάποιο λάθος και να χαθεί το νόημα. Προσωπικά πιο κατανοητό μου είναι στα αγγλικά). **** Implement the console filter MYFIND.EXE (MYFIND.C) which : Reads lines from a file and writes to the output only those containing the substring passed as passing parameter (Parameter #1) to the filter. MYFIND must work properly as a filter. However, if more than one passing parameters are passed to it at the command line it must obtain them as Input filename (Parameter #2) Output filename (Parameter #3) and open them respectively using their file descriptiors in place of those of the redirectable standard devices (stdin,stdout) In all cases the first passing parameter is mandatory and represents the substring. If this first passing parameter has not been passed, then the program must send an error message to the standard error device. Example: Given file BOOKS.TXT we wish to create a subfile CBOOKS.TXT which contains only those lines of BOOKS.TXT containing the substring "computer". The following command lines must all work properly a. MYFIND computer < BOOKS.TXT > CBOOKS.TXT b. MYFIND computer BOOKS.TXT > CBOOKS.TXT c. MYFIND computer BOOKS.TXT CBOOKS.TXT HELP: Use two file descriptors for instance fdin fdout Based on the value of argc (1,2,3) assign to these file descriptors a value of the appropriate standard device (stdin,stdout) or the return value of an fopen(..) statement. Then, use (for either case above) the functions fgets fputs (or fprintf) to read or write from/to the files or devices. ***** Όποιος έχει κέφι να βοηθήσει λίγο / πολύ είναι ευπρόσδεκτος Επείσης αν έχετε κάποια καλή Internet πήγη που νομίζετε οτι μπορεί να βοηθήσει προτείνετε μου ελεύθερα. Ευχαριστώ Link to comment Share on other sites More sharing options...
greekfragma Δεκέμβριος 6, 2004 #2 Κοινοποίηση Δεκέμβριος 6, 2004 καλημερα και καλως ηλθες..........εαν ηξερα 5 πραγματακια θα σε βοηθουσα δινοντας σου καποια λινκ......το να ζητας βοηθεια αμεση(να σου λυσει καποιος αλλος την εργασια,πιστεψε με,δεν θα σου κανει καλο)τσεκαρε οποιο λινκ σου δωσουν τα παιδια που γνωριζουν και ξεκινα διαβασμα........καλη συνεχεια Link to comment Share on other sites More sharing options...
kagelar34 Δεκέμβριος 6, 2004 #3 Κοινοποίηση Δεκέμβριος 6, 2004 φίλε μου δεν πιστεύω να είναι η πρώτη άσηση αυτή σε C έτσι?’ρα κάτει ξέρεις ήδη ,αποκλείεται να σας έβαλαν την συγκεκριμένη άσκηση ως πρώτη Τώρα αν ξέρεις λίγα πράγματα και θες να βοηθήσουμε πολύ ευχαρίστως πάντως πρέπει να έχεις γνώσεις για να φτιάχνεις αρχεία, να εργάζεσαι με ορ'ίσματα να διαβάζεις κατάλληλα από την είσοδο (με λίγο που κοίταξα μάλλον πρέπει να διαβάζεις χαρακτηρα -χαρακτήρα) από την είσοδο να κάνεις τους ελέγχους στο κυρίως πρόγραμμα (φίλτρο) και να βγάζεις τα αποτελέσματα νομίζω σε αρχείο θέλει ...μπλα-μπλα ....αν κάνεις search εδώ μέσα θα βρεις καλούς τίτ,λους για C όπως το κορυφαιο των Ριτσι και Κέριγκαν The C proramming language νομίζω λέγεται .Πάντως το καλύτερο λινκ σε τέτοιες περιπτώσεις είναι το ίδιο το βιβλίο σου , αν πάλι θες να κάνεις κάτι συγκεκριμένο και δεν μπορείς εκεί θα βοηθήσουμε όλοι π.χ δεν ξέρεις να εργαστείς με ορίσματα λέω εγώ ή ποιά συνάρτηση κάνει συγκεκριμένο πράγμα ή "να χρησιμοποιήσω getchar() ¨η scanf ή γετψη ?" Link to comment Share on other sites More sharing options...
No Quarter Δεκέμβριος 6, 2004 Author #4 Κοινοποίηση Δεκέμβριος 6, 2004 Για να απαντήσω και στους δυο. Ναί όντως δεν είναι η πρώτη άσκηση. Για την ακρίβεια είναι η τελευταία. Απλά λόγω άλλων εργασιών σε άλλα μαθήματα αυτή μου έμεινε για τελευταία και την παραδίδω την Πέμπτη το απόγευμα ! Δεν είναι οτι δεν ξέρω το Xρηστό μου απο C αλλά αυτά που ζητάει η άσκηση προς το παρών δεν τα κατέχω. Και το βιβλίο που λές του Kerrigan and Ritchie διαβάζω!!! Αλλά μου είναι τρομερά δυσκολό. Το βιβλίο απευθύνεται σε άτομα που έχουν μια αρκετά γερη βάση στην C. Το μεγαλύτερο πρόβλημα το έχω στους pointers και στο reading απο file. Πράγματα τα οποία η άσκηση χρειάζεται. Απλά ότι πληροφορίες μπορείτε να δώσετε θα βοηθούσαν τουλάχιστον να πάρω μια ιδέα. Ευχαριστώ για τις απαντήσεις! Link to comment Share on other sites More sharing options...
dorus Δεκέμβριος 7, 2004 #5 Κοινοποίηση Δεκέμβριος 7, 2004 κοιτα το ΠΜ σου για λιγη βοηθεια. παντως το σωστο να λεγεται το κερνιγκαν και ριτσι βιβλιο ειναι δυσκοιλιο Link to comment Share on other sites More sharing options...
No Quarter Δεκέμβριος 8, 2004 Author #6 Κοινοποίηση Δεκέμβριος 8, 2004 Λοιπόν έβγαλα μια άκρη.Αυτός είναι ο κώδικας που έχω γράψει μέχρι τώρα:*****int main(int argc, char *argv[]){FILE *fstart, *fend; char string[1000]; fstart=fopen("F:\\test.txt", "r"); fend=fopen("F:\\testend2.txt", "w"); // If there is a problem opening the file return error code 1 and end the program if (fstart==NULL) { printf("File not found!\n"); return 1; } while (fgets(string,1000,fstart)!=NULL) { if (argv[1] != NULL) { if (strstr (string, argv[1]) != 0) { printf("%s",string); fprintf(fend, "%s", string); } } } printf("\n"); fclose(fstart); fclose(fend); return 0;}*****Το πρόγραμμα κάνει αυτό που θέλω, δηλαδή βρίσκει μεσα στο file test.txt αν υπάρχουν φράσεις με ότι βάλω στο DOS ως passing parameter ( στο argv[1] ) και τις κάνει copy στο file testend2.txt και τις δείχνει και στην οθόνη.Τώρα έχω κολήσει αλλού:Μπορεί κάποιος να μου πεί σαν λογική στο DOS τι πρέπει θεωρητικά να κάνουν τα παρακάτω:a. MYFIND computer < BOOKS.TXT > CBOOKS.TXTb. MYFIND computer BOOKS.TXT > CBOOKS.TXTc. MYFIND computer BOOKS.TXT CBOOKS.TXTΘέλω να πώ για παράδειγμα, που κολάει το < μετά το computer το οποίο θεωρητικά είναι η key phrase βάση της οποίας ψάχνω το file? Link to comment Share on other sites More sharing options...
No Quarter Δεκέμβριος 8, 2004 Author #7 Κοινοποίηση Δεκέμβριος 8, 2004 ΟΚ το τελείωσα. Τελικά εύκολο ήταν. Να και ο κώδικας: (τα πιο πολλά είναι documentation) #include <stdio.h> #include <string.h> FILE *fdin, *fdout; char string[1000]; main (int argc, char*argv[]) { // In case more than 4 or less or equal to 1 // parameter is passed print error to the screen if (argc<=1 || argc>4) { fprintf(stderr,"Error!\n"); return 1; } // For the 'myfind computer<books.txt>cbooks.txt' case else if (argc==2) { fdin=stdin; fdout=stdout; } // For the 'myfind computer books.txt>cbooks.txt' case else if (argc==3) { fdin=fopen(argv[2],"r"); fdout=stdout; } // For the 'myfind computer books.txt cbooks.txt' case else if (argc==4) { fdin=fopen(argv[2],"r"); fdout=fopen(argv[3],"w"); } // Get the line that matches the argument on argv[1] // and copy it to the destination file while (fgets(string,1000,fdin) != 0) if (argv[1] != 0) if (strstr(string,argv[1]) != 0) fprintf(fdout,"%s",string); fclose(fdin); fclose(fdout); return 0; } Ευχαριστώ για τις απαντήσεις! Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.