Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Programma di utilità spicciola
Forum - C/C++ - Programma di utilità spicciola

Avatar
AldoBaldo (Member)
Guru


Messaggi: 633
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 15:22
Sabato, 02/04/2022
Vista la cronaca di quest'ultimo mese, ho pensato di mettere questo programmino a disposizione di chiunque ritenga di poterne trarre vantaggio.

DEZEDDER

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <ctype.h>
  5. #include <locale.h>
  6.  
  7. const char   kEst[]     = ".txt";
  8. const char   kStrDeZ[]  = " (dezedded).txt";
  9. const size_t kLStrDeZ   = 15;
  10. const char   kSostituto = '…';
  11.  
  12. int de_zeta( const char *nome_file );
  13. void presenta( void );
  14.  
  15. int main( int argc, char *argv[] ) {
  16.     setlocale( LC_ALL, "Italian_Italy.1252" );
  17.  
  18.     if( argc>1 ) {
  19.         int i;
  20.  
  21.         for( i=1; i<argc; ++i )
  22.             de_zeta( argv[i] );
  23.     }
  24.     else {
  25.         presenta();
  26.         while( '\n'!=getchar() );
  27.     }
  28.  
  29.     return 0;
  30. }
  31.  
  32. void presenta( void ) {
  33.    puts( "\n D E Z E D D E R" );
  34.    puts( " ===============================================================" );
  35.    puts( " Questo programma può aiutare ad essere certi che i propri file" );
  36.    puts( " di testo siano correttamente allineati alle inclinazioni del" );
  37.    puts( " Parlamento corrente, così come \"ispirato\" in sede UE.\n" );
  38.    puts( " Trascina sull'icona dell'eseguibile i file di tipo .txt da" );
  39.    puts( " epurare." );
  40.    puts( " ===============================================================" );
  41. }
  42.  
  43. char *carica_file( const char *nome_file ) {
  44.     char *t = NULL; /* il testo da dezetificare */
  45.     FILE *f = NULL; /* il file con il testo da dezetificare */
  46.     int ok  = 0;
  47.  
  48.     if( nome_file ) {
  49.         if( (f=fopen(nome_file,"r")) ) {
  50.             long lt;
  51.             fseek( f, 0, SEEK_END );
  52.             lt = ftell( f );
  53.             fseek( f, 0, SEEK_SET );
  54.  
  55.             if( (ok=lt>=0) ) {
  56.                 if( (t=calloc(lt+1,sizeof(*t))) ) {
  57.                     long i = 0;
  58.                     int c = fgetc( f );
  59.  
  60.                     while( EOF!=c ) {
  61.                         t[i++] = c;
  62.                         c = fgetc( f );
  63.                     }
  64.  
  65.                     ok = 1;
  66.                 }
  67.             }
  68.         }
  69.     }
  70.  
  71.     if( f ) { fclose(f); f = NULL; }
  72.     if( !ok && t ) { free(t); t = NULL; }
  73.  
  74.     return t;
  75. }
  76.  
  77. int sostituisci_carattere( char *t, char ex_c, char nuovo_c ) {
  78.     int ok = 0;
  79.  
  80.     if( t && ex_c && nuovo_c ) {
  81.         size_t i, lt = strlen( t );
  82.         char ex_c_upper = toupper( ex_c );
  83.         char ex_c_lower = tolower( ex_c );
  84.  
  85.         for( i=0; i<lt; ++i )
  86.             if( t[i] == ex_c_upper || t[i] == ex_c_lower )
  87.                 t[i] = nuovo_c;
  88.  
  89.         ok = 1;
  90.     }
  91.  
  92.     return ok;
  93. }
  94.  
  95. char *nome_file_dez( const char *nome_file ) {
  96.     char *nfDez = NULL; /* il nome del file dezetificato */
  97.     char *est   = NULL; /* il puntatore all'estensione in nome_file */
  98.  
  99.     if( nome_file ) {
  100.         if( (est=strrchr(nome_file,'.')) && 0==strcmp(est,kEst) ) {
  101.             size_t l_est = strlen( est );
  102.             size_t l_nome_file = strlen( nome_file ) - l_est;
  103.  
  104.             if( (nfDez=calloc(l_nome_file+kLStrDeZ+1,sizeof(*nfDez))) ) {
  105.                 memcpy( nfDez, nome_file, l_nome_file );
  106.                 memcpy( nfDez+l_nome_file, kStrDeZ, kLStrDeZ+1 );
  107.             }
  108.         }
  109.     }
  110.  
  111.     return nfDez;
  112. }
  113.  
  114. int de_zeta( const char *nome_file ) {
  115.     char *nfDez = NULL; /* il nome del file dezetificato */
  116.     FILE *fDez  = NULL; /* il puntatore allo stream del file dezetificato */
  117.     char *t     = NULL; /* il testo da dezetificare */
  118.     int ok      = 0;
  119.  
  120.     if( (t=carica_file(nome_file)) ) {
  121.         sostituisci_carattere( t, 'z', kSostituto );
  122.  
  123.         if( (nfDez=nome_file_dez(nome_file)) ) {
  124.             if( (fDez=fopen(nfDez,"w+")) ) {
  125.                 fprintf( fDez, t );
  126.                 fclose(fDez); fDez = NULL;
  127.             }
  128.  
  129.             free(nfDez); nfDez = NULL;
  130.         }
  131.  
  132.         free(t); t = NULL;
  133.     }
  134.  
  135.     return ok;
  136. }



ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
PM Quote
Avatar
Nippolo (Normal User)
Newbie


Messaggi: 3
Iscritto: 28/05/2022

Segnala al moderatore
Postato alle 13:02
Sabato, 28/05/2022
In effetti potrebbe tornare utile! :rofl:

Quando hai tempo magari potresti implementare anche un "asterischizzatore" di vocali finali! :D


La pecora è vissuta per tutta la vita con la paura del lupo, ma alla fine se l'è mangiata il pastore!

Forse sarebbe meglio se l'Occidente la smettesse di essere così "generoso"... a furia di esportare democrazia, ne rimane sempre meno per noi!
PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1066
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 16:41
Sabato, 28/05/2022
Non mi diletto in C da un po' di tempo, bello, ne approfitto per salutarti AldoBaldo, ci hai mostrato come potrebbe essere scritta l'istruzione C#:
testo.Replace("z","...").Replace("Z","...");  in C. :rofl:

Copiato e messo tra gli esempi C CODE::BLOCKS, funziona benissimo, Grazie.

Saluto anche Nippolo, mi fa piacere vederti qui. :rotfl:

Ultima modifica effettuata da Carlo il 28/05/2022 alle 17:50


in programmazione tutto è permesso
PM Quote
Avatar
Nippolo (Normal User)
Newbie


Messaggi: 3
Iscritto: 28/05/2022

Segnala al moderatore
Postato alle 21:14
Sabato, 28/05/2022
Testo quotato

Postato originariamente da Carlo:
Saluto anche Nippolo, mi fa piacere vederti qui. :rotfl:


Un saluto a tutti anche da parte mia! :)

@Carlo in un altro forum il tuo nick ricorda un noto passatempo esacolore? :D


La pecora è vissuta per tutta la vita con la paura del lupo, ma alla fine se l'è mangiata il pastore!

Forse sarebbe meglio se l'Occidente la smettesse di essere così "generoso"... a furia di esportare democrazia, ne rimane sempre meno per noi!
PM Quote
Avatar
AldoBaldo (Member)
Guru


Messaggi: 633
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 10:04
Martedì, 31/05/2022
Ringrazio Carlo e Nippolo per l'apprezzamento espresso nei confronti del mio Dezedder che ha chiaramente un malcelato intento tra il polemico e il sarcastico.

Quanto al suggerimento di Nippolo riferito alla realizzazione di un programma in grado di garantire la gestione "educata" di un testo dal punto di vista del genere sessuale, lo trovo senz'altro valido. Un programma così potrebbe rivelarsi una gran comodità e magari anche una tutela nei riguardi di eventuali procedimenti giudiziari sul tema. La realizzazione tecnica di un programma con quelle funzionalità, però, presenta complessità che ritengo di non essere in grado di affrontare. Non sarebbe infatti sufficiente sostituire l'ultima lettera di ogni parola, ma occorrerebbe distinguere la tipologia delle parole nel contesto del discorso, oltre a prendere in considerazione l'innumerevole casistica della generazione del maschile/femminile nella nostra lingua, il che è quello che tecnicamente credo si possa definire un gran casino. Certo è che se un programma del genere esistesse, otterrebbe la mia ammirazione tanto per l'idea quanto per la realizzazione. Anzi, per la realizZANzione.

Ultima modifica effettuata da AldoBaldo il 31/05/2022 alle 10:06


ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
PM Quote
Avatar
Nippolo (Normal User)
Newbie


Messaggi: 3
Iscritto: 28/05/2022

Segnala al moderatore
Postato alle 13:27
Martedì, 31/05/2022
Testo quotato

Postato originariamente da AldoBaldo:
La realizzazione tecnica di un programma con quelle funzionalità, però, presenta complessità che ritengo di non essere in grado di affrontare. Non sarebbe infatti sufficiente sostituire l'ultima lettera di ogni parola, ma occorrerebbe distinguere la tipologia delle parole nel contesto del discorso, oltre a prendere in considerazione l'innumerevole casistica della generazione del maschile/femminile nella nostra lingua, il che è quello che tecnicamente credo si possa definire un gran casino.


Ovviamente la mia era una battuta, mi rendo conto che implementare una cosa del genere non è affatto semplice, anzi!


La pecora è vissuta per tutta la vita con la paura del lupo, ma alla fine se l'è mangiata il pastore!

Forse sarebbe meglio se l'Occidente la smettesse di essere così "generoso"... a furia di esportare democrazia, ne rimane sempre meno per noi!
PM Quote