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

διαγραφή γραμμών απο .ΤΧΤ


mpentenis

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

Δημοσ.

Να και η δική μου εκδοχή:

 

>
/*
 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 να ξεμπερδεύεις;

Δημοσ.

Thanks για το BUFSIZ, κάθετε "γάντι" :-)

 

Στην έκδοση R2 ελέγχω για int overflow με την βοήθεια της MAXINT η οποία μεταξύ των 16bit και 32bit compilers διαφέρει για αυτό πρόσθεσα αυτή την σημείωση, αν και σωστότερο θα ήταν, όπως το βλέπω εγώ, να όριζα τα int ως long, αλλά την σήμερον ημέρα (32bit) δεν τρέχει τίποτα..

 

-ωραίος ο έλεγχος με την strspn, γενικά εξαιρετικός κώδικας -όπως πάντα ;)

Δημοσ.
Thanks για το BUFSIZE, κάθετε "γάντι" :-)

UR welcome :-)

 

-ωραίος ο έλεγχος με την strspn ;)

Ευχαριστώ αλλά δεν την αξίζω και πάλι. Διαβασμένο το έχω από τον αντίστοιχο κώδικα στο opensolaris.

Δημοσ.

τελικα έκανα δουλειά με το πρόγραμμα του DiAvOl, δουλεψε μια χαρά (αν μου κάνει και την μικρή βελτίωση που τουυ ανέφερα, ακομα καλύτερα :P)

Δημοσ.

Twra diabasa to priv :)

 

Usage:

copyfile.exe <old-file> <new-file> <numlines>

 

px: copyfile.exe myfile1.txt myfile2.txt 23

Δημοσ.

ναι, οντως 8α τρεχει αλλο .bat, αλλά επειδή αυτό το .bat θα εκτελείται από άλλο .bat, απλά θα βάλω την εντολή για την διαγραφή στο 1ο bat, και μετά θα του πω να τρέχει το 2ο αρχείο

 

οι γνώσεις μου σε προγραμματισμό περιορίζονται σε αυτές τις διαδικασίες :P

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

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

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