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