chiossif Δημοσ. 14 Φεβρουαρίου 2007 Δημοσ. 14 Φεβρουαρίου 2007 Να και η δική μου εκδοχή: > /* This is a simplified head command. Copyright (C) 2007 Ch Iossif This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License [ http://www.gnu.org/copyleft/gpl.html ] as published by the Free Software Foundation [ www.fsf.org ]. */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #define DEFAULT_LINE_NUMBER 10 void usage(void); int main(int argc, char **argv) { FILE *fp; int linenum=DEFAULT_LINE_NUMBER, ok=0; char buff[bUFSIZ]; register int i, j; for (i = 1; i < argc; i++) { if ((argv[i][0] == '-') && isdigit(argv[i][1])) { if (strlen(&argv[i][1])!=strspn(&argv[i][1], "0123456789")) { fprintf(stderr, "%s: Error: Badly formed number\n", argv[0]); usage(); } if ((linenum==DEFAULT_LINE_NUMBER)&&((linenum=(int)strtol(&argv[i][1],(char **)NULL,10))<1)) { fprintf(stderr, "%s: Warning: Bad integer. Default value is %d.\n", argv[0], DEFAULT_LINE_NUMBER); linenum=DEFAULT_LINE_NUMBER; } } if ((argv[i][0] == '-') && (argv[i][1] == 'n')) { if (strlen(&argv[i][2])!=strspn(&argv[i][2], "0123456789")) { fprintf(stderr, "%s: Error: Badly formed number\n", argv[0]); usage(); } if ((linenum==DEFAULT_LINE_NUMBER)&&((linenum=(int)strtol(&argv[i][2],(char **)NULL,10))<1)) { fprintf(stderr, "%s: Warning: Bad integer. Default value is %d.\n", argv[0], DEFAULT_LINE_NUMBER); linenum=DEFAULT_LINE_NUMBER; } } if (argv[i][0] != '-') { ok=1; if((fp=fopen(argv[i],"r"))!=NULL) { printf("==> %s <==\n", argv[i]); for (j=0;j<linenum&&fgets(buff,BUFSIZ,fp)!=NULL;j++) printf("%s",buff); fclose(fp); } else fprintf(stderr, "%s: Warning: Filename %s does not exist.\n", argv[0], argv[i]); } } if (!ok) for (i=0;i<linenum&&fgets(buff,BUFSIZ,stdin)!=NULL;i++) printf("%s",buff); return 0; } void usage(void) { printf("usage: head [-n#] [-#] [filename...]\n"); exit(1); } Σε DOS/Win η λύση του φίλου Directx, όπως υποδεικνύει, καλύπτει και automatic wildcards handling. @DirectX: Αντί για 4096 βάλε BUFSIZ να είσαι πιο ANSI . Developed in 32bit were C INT is considerated as a 32bit DWORD with MAXINT equal to 2,147,483,647 (LONG) instead of 16bit INT were equal to 32,767 (SHORT INT in C/C++ Builder 6.0). Με αυτό γιατί ασχολήθηκες; Έχεις κάπου πρόβλημα με το μέγεθος; Αν ναι, δεν μπορείς να χρησιμοποιήσεις την sizeof να ξεμπερδεύεις;
Directx Δημοσ. 14 Φεβρουαρίου 2007 Δημοσ. 14 Φεβρουαρίου 2007 Thanks για το BUFSIZ, κάθετε "γάντι" Στην έκδοση R2 ελέγχω για int overflow με την βοήθεια της MAXINT η οποία μεταξύ των 16bit και 32bit compilers διαφέρει για αυτό πρόσθεσα αυτή την σημείωση, αν και σωστότερο θα ήταν, όπως το βλέπω εγώ, να όριζα τα int ως long, αλλά την σήμερον ημέρα (32bit) δεν τρέχει τίποτα.. -ωραίος ο έλεγχος με την strspn, γενικά εξαιρετικός κώδικας -όπως πάντα
chiossif Δημοσ. 14 Φεβρουαρίου 2007 Δημοσ. 14 Φεβρουαρίου 2007 Thanks για το BUFSIZE, κάθετε "γάντι" UR welcome -ωραίος ο έλεγχος με την strspn Ευχαριστώ αλλά δεν την αξίζω και πάλι. Διαβασμένο το έχω από τον αντίστοιχο κώδικα στο opensolaris.
mpentenis Δημοσ. 14 Φεβρουαρίου 2007 Μέλος Δημοσ. 14 Φεβρουαρίου 2007 τελικα έκανα δουλειά με το πρόγραμμα του DiAvOl, δουλεψε μια χαρά (αν μου κάνει και την μικρή βελτίωση που τουυ ανέφερα, ακομα καλύτερα )
Επισκέπτης Δημοσ. 15 Φεβρουαρίου 2007 Δημοσ. 15 Φεβρουαρίου 2007 http://gnuwin32.sourceforge.net/ <== Gnu tools gia windows @mpentenis 8eleis na trexei ena bat otan teleiwnei h antigrafh twn 10 grammwn ?
Επισκέπτης Δημοσ. 15 Φεβρουαρίου 2007 Δημοσ. 15 Φεβρουαρίου 2007 Twra diabasa to priv Usage: copyfile.exe <old-file> <new-file> <numlines> px: copyfile.exe myfile1.txt myfile2.txt 23
mpentenis Δημοσ. 15 Φεβρουαρίου 2007 Μέλος Δημοσ. 15 Φεβρουαρίου 2007 ναι, οντως 8α τρεχει αλλο .bat, αλλά επειδή αυτό το .bat θα εκτελείται από άλλο .bat, απλά θα βάλω την εντολή για την διαγραφή στο 1ο bat, και μετά θα του πω να τρέχει το 2ο αρχείο οι γνώσεις μου σε προγραμματισμό περιορίζονται σε αυτές τις διαδικασίες
mpentenis Δημοσ. 15 Φεβρουαρίου 2007 Μέλος Δημοσ. 15 Φεβρουαρίου 2007 δοκιμασα το νεο copyfile, ειναι οτι ακριβως χρειάζομαι, αρκει να μην εμφανίζει μήνυμα για να press any key
Επισκέπτης Δημοσ. 16 Φεβρουαρίου 2007 Δημοσ. 16 Φεβρουαρίου 2007 Final version (xwris to press any key) Enjoy
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.