Repository 32bit  Forum
Repository 64bit  Wiki

Espressione regolare per rimuovere commenti da un file json

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.

Espressione regolare per rimuovere commenti da un file json

Messaggioda miklos » sab feb 23, 2013 9:35

Ciao a tutti,

come da oggetto sto sviluppando un progetto in java che sfrutta il formato json per i file di configurazione.
Col senno di poi avrei fatto tutto in xml, ma java e xml sono un'accoppiata relativamente e inutilmente complicata :D
Ad ogni modo, il problema che ho con questo formato è che essendo nato prevalentemente per lo scambio di dati non contempla l'utilizzo di parti commentate. Questo un po' mi limita nel contesto in cui lo utilizzo perchè mi sarebbe utile avere dei file di configurazione con porzioni commentate.

La soluzione che ho pensato è quella di leggere il file in una stringa, manipolarla con una espressione regolare e darla poi in pasto al parser json.
L'espressione regolare dovrebbe eliminare i pezzi indesiderati secondo le seguenti due regole
  • dal primo carattere '#` fino a fine linea
  • dalla prima sequenza di caratteri '/*' fino a '*/'
.. essendo una schiappa con le espressioni regolari, mi date qualche dritta su come scriverla?!?!

grazie in anticipo
ho visto cose che voi astemi non potete immaginare
miklos
Linux 3.x
Linux 3.x
 
Messaggi: 1139
Iscritto il: lun lug 16, 2007 16:39
Località: Roma
Slackware: 14.1 64bit
Kernel: 3.12.6
Desktop: openbox 3.5.2

Re: Espressione regolare per rimuovere commenti da un file j

Messaggioda 414N » sab feb 23, 2013 10:19

Prima di tuffarci nel meraviglioso mondo delle espressioni regolari, posso chiederti se hai pensato ad altre alternative oltre a JSON e XML?
Se il progetto è tutto in Java la prima opzione che mi viene in mente è un file di proprietà (ovvero un insieme di chiavi-valori in formato testo) facilmente gestiti dalle API Java (vedi questo tutorial ufficiale).
Un'altra alternativa, più "omnicomprensiva" delle proprietà sarebbe lo sfruttamento delle Preferences API, che includono un backend di storage per rendere persistenti (in maniera platform dependent su ogni piattaforma) le preferenze specificate. Trovi un esempio qua, nella documentazione ufficiale di Java (sono in giro dalla versione 1.4, come puoi vedere dal link) e, se ti servisse, posso mostrarti del codice relativo al loro impiego.
Avatar utente
414N
Iper Master
Iper Master
 
Messaggi: 2876
Iscritto il: mer feb 13, 2008 16:19
Località: Bulagna
Slackware: 14.0 (x64)
Kernel: 3.2.29
Desktop: LXDE

Re: Espressione regolare per rimuovere commenti da un file j

Messaggioda invalid_packet » sab feb 23, 2013 10:49

Potresti anche pensare ad inserire un parametro di nome "description" o "comment" o "remark" fra i dati stessi.

Qualcosa tipo:

Codice: Seleziona tutto

{
    "fieldname":"nome",
    "key":"true",
    "index":"0",
    "description":"a short description"
}

Avatar utente
invalid_packet
Packager
Packager
 
Messaggi: 15
Iscritto il: gio mag 17, 2012 7:40
Nome Cognome: Giuseppe Manzo
Slackware: 13.37
Kernel: 2.6.37.6
Desktop: kde4

Re: Espressione regolare per rimuovere commenti da un file j

Messaggioda miklos » sab feb 23, 2013 11:09

@414n la scelta tecnica è stata fatta in base ad un semplice concetto... semplicità! non conoscevo le Preference Api pero' espresso in altri termini volevo avere un pojo da utilizzare come configurazione, che mi consentisse di non dover fare refactoring esteso, almeno per la parte di caricamente da file.
attualmente tramite Google GSON il caricamento del file di configurazione viene gestito da un metodo banale simil questo
Codice: Seleziona tutto
public static void loadFromFile(String file, Type type) {
   File confFile = new File(file);
   Reader conf = null;
   Gson gs = new Gson();
   Object confObj = null;
   try {
       conf = Files.newReader(confFile, Charset.forName("UTF-8"));
       confObj = gs.fromJson(conf, type);
       configuration = confObj;
   } catch (Exception e) {
       e.printStackTrace();
   } finally {
       try {
      if (conf != null)
          conf.close();
       } catch (IOException e) {
      e.printStackTrace();
       }
   }
    }

Ti ripeto, non conosco le refactoring api, ma in questo modo posso:
  • disaccoppiare l'oggetto configurazione, con lo storage.. che a sto punto puo' essere qualsiasi cosa (nello specifico il progetto in questione è un server smtp.. quindi per configurare il connettore, potrei tecnicamente includere nella configurazione l'oggetto java che lo definisce.. senza gestire travasi properties -> oggetto di nessun tipo.)
  • se aggiungo una flag, non devo curarmi dello storage.. basta aggiundere un campo nel json e ovviamente modificare il codice che utilizza sta configurazione
  • posso gestire diversi file di configurazione in un colpo solo.. e senza l'onere di dover configurare il sistema di configurazione.. che soprattutto in java è una cosa che mi urta assai.. ovvero complicare l'incomplicabile
@invalid_packet mi sa che forse mi sono spiegato male.. io intendo commentare come possibilità di avere roba tipo
Codice: Seleziona tutto
{
   "port":9999,
   "workers":120,
   "maxConnections":100,
   "mailDir":"outmail",
   "sessionConfig":{
               "mail.user":"bart",
               "mail.host":"example.org"
                                        # questo parametro è commentato.. decommentare in produzione
                                        # "mail.host":"pippopluto.org"
               }
         }
che venga visto in modo corretto:D
ho visto cose che voi astemi non potete immaginare
miklos
Linux 3.x
Linux 3.x
 
Messaggi: 1139
Iscritto il: lun lug 16, 2007 16:39
Località: Roma
Slackware: 14.1 64bit
Kernel: 3.12.6
Desktop: openbox 3.5.2


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite

cron