erlug
[Top] [All Lists]

Re: [Erlug] Compiti di fine anno

To: ERlug - Lista Pubblica <erlug@xxxxxxxxxxxxxx>
Subject: Re: [Erlug] Compiti di fine anno
From: Michele Mordenti <michele.mordenti@xxxxxxxxx>
Date: Thu, 31 Dec 2009 08:38:43 +0100
2009/12/30 Marco Mariani <marco.mariani@xxxxxxxxxxxx>:
> grep -E "^.{71}M" <in >out.m
> grep -E "^.{71}F" <in >out.f

Troppo facile, perchè non scrivere un bel filtro C come ai vecchi tempi:
terminale nero, caratteri verdi, emacs, gcc e un po' di prurito alle mani:
(p.s.: lo avevo omesso, ma le righe sono lunghe al massimo 226 caratteri)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define BUFFER_LEN 255

int main(int argc, char *argv[]) {
   FILE *rfile,*wfile;
   char buffer[BUFFER_LEN];
   char *fileSource, *fileTarget, *postfisso;
   char marker;
   int column;

   if (argc!=4) {
       printf("Uso:\n\t %s marker colonna filesorgente\n",argv[0]);
       return 1;
   }

   marker = argv[1][0];
   column = atoi(argv[2]);
   fileSource = strdup(argv[3]);
   postfisso = (char *) malloc(4*sizeof(char));
   fileTarget = (char *)
malloc((sizeof(fileSource)+sizeof(postfisso))*sizeof(char));
   strcpy(fileTarget,fileSource);
   postfisso[0]='_';
   postfisso[1]='_';
   postfisso[2]=marker;
   postfisso[3]='\0';
   strcat(fileTarget,postfisso);

   /* DEBUG
   printf("File sorgente: %s\n",fileSource);
   printf("File destinazione: %s\n",fileTarget);
   printf("marker: %c\ncolonna: %i\n", marker,column);
   */

   rfile = fopen(fileSource,"r");
   wfile = fopen(fileTarget,"w");

   if (rfile == NULL ){
       printf("Errore apertura file %s.\n",fileSource);
       return -1;
   }
   if (wfile == NULL ){
       printf("Errore apertura file %s.\n",fileTarget);
       return -1;
   }

   // fgets() restituisce un puntatore nullo alla fine del file.
   while ( fgets(buffer,BUFFER_LEN,rfile) ) {
       if(buffer[column] == marker){
           fputs(buffer,wfile);
       }
   }
   printf("Controlla il file %s\n",fileTarget);
   fclose(rfile);
   fclose(wfile);
   free(fileSource);
   free(fileTarget);
   free(postfisso);
   return 0;

-- 
Michele Mordenti
http://michelemordenti.netsons.org

<Prev in Thread] Current Thread [Next in Thread>