Il codice riportato di seguito ha lo scopo di identificare i caratteri non visualizzabili (codice ASCII del carattere maggiore di 127) presenti all’interno di un file di testo e di visualizzare il corrispondente codice ASCII.

Per poterlo utilizzare è necessario avere una conoscenza di base dei comandi da eseguire da un terminal su ambiente linux, sia per l’editazione, la compilazione ed infine l’esecuzione.

Scritto in linguaggio C, legge un file di testo carattere per carattere e scrive sullo standard output (praticamente sullo schermo) la riga e colonna dell’occorrenza riscontrata il cui codice ASCII è maggiore del valore di 127:

#include <stdio.h>
#include <stdlib.h> // For exit()
#include <string.h> // For strcpy

int main(int argc, char *argv[])
{
   FILE *fptr;
   char *filename;
   unsigned char c;
   unsigned long fileLen;
   unsigned long counter;

   filename = malloc(strlen(argv[1]));
   strcpy(filename, argv[1]);
   printf("filename: [%s]\n", filename);

   // Open file
   fptr = fopen(filename, "r");
   if (fptr == NULL) {
      printf("Cannot open file \n");
      exit(0);
   }
   free(filename);

   fseek(fptr, 0, SEEK_END);
   fileLen=ftell(fptr); // get the exact size of the pic
   fseek(fptr, 0, SEEK_SET);
 

   // Read contents from file
   unsigned int rows = 1;
   unsigned int cols = 0;
   unsigned int cr = 0;
   unsigned int tab = 0;
   for (counter=0; counter<fileLen; counter++) {
      c = fgetc(fptr);
      cols++;
      if (c == '\n') {
         rows++;
         cols = 0;
      } 
         else if (c == '\r') {
         cr++;
      }
         else if (c == '\t') {
         tab++;
      }
      else if (c >=32 && c <= 127) {
         //
      }
      else {
         printf ("row:[%d] column:[%d] character:[%x][%i]\n", rows, cols, c, c);
      }
      // putc(c,stdout);
  }
  printf ("\n%d records, %lu file len\n", rows, fileLen); 

  fclose(fptr);
  return 0;
}

Salvare il contenuto sopra nel file up127.c

Compilare il sorgente con il comando gcc come riportato di seguito:

gcc up127.c -o up127

Si otterrà l’eseguibile up127

Senza spostarsi dalla cartella in cui è stato lanciato il comando gcc, eseguire, su sistema linux, nel seguente modo:

./up127 nomefile.txt

L’output prodotto sarà simile a:

filename: [nomefile.txt]
row:[169] column:[83] character:[<FF>]
row:[169] column:[101] character:[<FF>]
row:[169] column:[102] character:[<FF>]
row:[306] column:[27] character:[<9A>]
row:[313] column:[77] character:[<8E>]
row:[314] column:[32] character:[<8E>]
...
...
...

318 records, 89676 file len
Share Button

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *