Jump to content



Βοήθεια Χριστιανοί κοντεύω να φλιπάρω


No Quarter

Recommended Posts

Πρώτο μου 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 πήγη που νομίζετε οτι μπορεί να βοηθήσει προτείνετε μου ελεύθερα.

Ευχαριστώ :D

Link to comment
Share on other sites

καλημερα και καλως ηλθες..........

εαν ηξερα 5 πραγματακια θα σε βοηθουσα δινοντας σου καποια λινκ......το να ζητας βοηθεια αμεση(να σου λυσει καποιος αλλος την εργασια,πιστεψε με,δεν θα σου κανει καλο)

τσεκαρε οποιο λινκ σου δωσουν τα παιδια που γνωριζουν και ξεκινα διαβασμα........

καλη συνεχεια

Link to comment
Share on other sites

φίλε μου δεν πιστεύω να είναι η πρώτη άσηση αυτή σε C έτσι?

’ρα κάτει ξέρεις ήδη ,αποκλείεται να σας έβαλαν την συγκεκριμένη άσκηση ως πρώτη

Τώρα αν ξέρεις λίγα πράγματα και θες να βοηθήσουμε πολύ ευχαρίστως

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

αν κάνεις search εδώ μέσα θα βρεις καλούς τίτ,λους για C όπως το κορυφαιο των Ριτσι και Κέριγκαν The C proramming language νομίζω λέγεται .

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

π.χ δεν ξέρεις να εργαστείς με ορίσματα λέω εγώ ή ποιά συνάρτηση κάνει συγκεκριμένο πράγμα ή "να χρησιμοποιήσω getchar() ¨η scanf ή γετψη ?"

Link to comment
Share on other sites

Για να απαντήσω και στους δυο.

Ναί όντως δεν είναι η πρώτη άσκηση. Για την ακρίβεια είναι η τελευταία. Απλά λόγω άλλων εργασιών σε άλλα μαθήματα αυτή μου έμεινε για τελευταία και την παραδίδω την Πέμπτη το απόγευμα ! :woot: Δεν είναι οτι δεν ξέρω το Xρηστό μου απο C αλλά αυτά που ζητάει η άσκηση προς το παρών δεν τα κατέχω.

Και το βιβλίο που λές του Kerrigan and Ritchie διαβάζω!!! Αλλά μου είναι τρομερά δυσκολό. Το βιβλίο απευθύνεται σε άτομα που έχουν μια αρκετά γερη βάση στην C.

Το μεγαλύτερο πρόβλημα το έχω στους pointers και στο reading απο file. Πράγματα τα οποία η άσκηση χρειάζεται.

Απλά ότι πληροφορίες μπορείτε να δώσετε θα βοηθούσαν τουλάχιστον να πάρω μια ιδέα.

Ευχαριστώ για τις απαντήσεις!

Link to comment
Share on other sites

Λοιπόν έβγαλα μια άκρη.

Αυτός είναι ο κώδικας που έχω γράψει μέχρι τώρα:

*****

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.TXT

b. MYFIND computer BOOKS.TXT > CBOOKS.TXT

c. MYFIND computer BOOKS.TXT CBOOKS.TXT

Θέλω να πώ για παράδειγμα, που κολάει το < μετά το computer το οποίο θεωρητικά είναι η key phrase βάση της οποίας ψάχνω το file?

Link to comment
Share on other sites

ΟΚ το τελείωσα. Τελικά εύκολο ήταν. :happy:

Να και ο κώδικας: (τα πιο πολλά είναι 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;

}

Ευχαριστώ για τις απαντήσεις! :T:

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

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

Important Information

Ο ιστότοπος theLab.gr χρησιμοποιεί cookies για να διασφαλίσει την καλύτερη εμπειρία σας κατά την περιήγηση. Μπορείτε να προσαρμόσετε τις ρυθμίσεις των cookies σας , διαφορετικά θα υποθέσουμε ότι είστε εντάξει για να συνεχίσετε.