Studio sul filtraggio di una stringa.
E' stata dura, ma alla fine ce l'ho fatta e dovrebbe funzionare con qualsiasi stringa e qualsiasi carattere ASCII riconosciuto dalla tastiera e dal sistema operativo.
Usarla è semplice.
<programma> "<stringa>" "<caratteri_da_filtrare>"
La stringa è una qualsiasi stringa di cui volete filtrare la lista di caratteri elencata in <lista da filtrare>. Raccomando l'uso dei doppi apici ("") per delimitare l'argomento 1 e il 2: se la stringa ha degli spazi e li volete filtrare dovete per forza mettere i doppi apici.
Avendo
filter "stringa da filtrare" " "
il risultato sarà
stringadafiltrare
*===================*
Qua dentro c'è tutto quello che ho imparato finora, tra cui quelle due brutte bestie dei puntatori e del passaggio degli argomenti ad una funzione per riferimento. C'è anche un po' di principio di minimo privilegio, cosa che dovrò studiarmi un po' meglio.
Questo studio fa parte del programmino per lo split di un file di testo. Serve ad un corretto parsing della riga di comando: rimozione dei trattini (-), filtraggio di caratteri in generale per far capire al programma che cosa si vuole fare.
Se volete fate un po' di betatesting con tutto quello che vi salta in mente. Se non vi torna qualcosa o non funziona come pensate fatemi un fischio.
Sto mettendo tutte le funzioni ausiliarie in un header chiamato "mainheader.h". Per compilare correttamente i sorgenti che ne fanno riferimento dovete creare un albero di sorgenti come il seguente:
cartella\headers\mainheader.h
cartella\programma\programma.c
perchè nell'intestazione dei sorgenti C mainheader.h è posto in
..\headers\mainheader.h.
Oppure potete modificare direttamente i sorgenti affinchè puntino alla directory o al file che più vi aggradano.
Comunque allego l'eseguibile Win32 e GNU/Linux (estensione .GNU) per una prova immediata.
!!!IMPORTANTE!!!
Se volete compilarlo su GNU/Linux e tenete la struttura dei sorgenti come evidenziata sopra dovete andare in filter.c e cambiare da backslash a slash. Vale a dire, da così
#include "..\headers\mainheader.h"
a così
#include "../headers/mainheader.h"
altrimenti gcc non troverà il file header necessario.
Segato un bug che dava segfault... migliorata la descrizione