pistilloi (Normal User)
Newbie
Messaggi: 9
Iscritto: 03/12/2010
|
Salve, mi serve un dizionario per ruzzle, ho scaricato il GNU dictionary, in formato txt chiamato it_IT.txt; ma si presenta cosi:
abbarcato/EyT
abbaruffando/D
abbaruffare/ALKhlTXI
abbaruffato/EyT
Abbasanta
abbassabile/STU
abbassalingua/Tq
abbassamento/OTq
abbassando/D
abbassare/ALKhlTXI
abbassata/QTU
abbassato/EyT
abbasso
abbastanza
Abba/T
Abbateggio
abbattendo/D
abbattere/BTXI
abbattibile/STU
abbattifieno/Tq
abbattimento/OTq
abbattitore/STqr
...
...
quindi è chiaro che lo "\" e i caratteri post-posti, son di tropo. Allorché ho scritto questo piccolo script, che mi par logicamente coerente, ma il file risultante è vuoto.
Codice sorgente - presumibilmente Python |
import string import argpars parser = argparse.ArgumentParser() parser.add_argument("infile") parser.add_argument("outfile") args = parser.parse_args() input = open( args.infile ,'r') lista = input.read() input.close() newlista = "" for s in lista: if string.find(s,"/") != 1: newlista += s[:string.find(s,"/")]+"\n" else: newlista += s+"\n" output = open( args.outfile ,'w') output.write(newlista) output.close()
|
eseguo lo script nel seguente modo python script.py it_IT.txt namenewdict.txt
Agli esperti la parola! xD xD xD
|
|
()
Newbie
Messaggi:
Iscritto:
|
ora, premetto che non so il python ma quel for s in lista: non mi convince, s dovrebbe essere una stringa ma usato in qual modo credo che non contenga una sola riga, ma tutte. Però non so proprio cosa dirti........
|
|
ZioCrocifisso (Member)
Pro
Messaggi: 135
Iscritto: 06/03/2013
|
Il testo dopo / puoi toglierlo con sed:
Codice sorgente - presumibilmente Plain Text |
sed 's/\/.*//' < filedizionario.txt > nuovofile.txt
|
|
|
pistilloi (Normal User)
Newbie
Messaggi: 9
Iscritto: 03/12/2010
|
ho provato quest' unix command, ottenendone alcun risultato; poi ho controllato il sinottico del commando sad, esso appariva circa cosi:
Codice sorgente - presumibilmente Plain Text |
sad /parola_da_sostituire/parola_con_cui_sostituire/ <file_input.txt> file_output.txt
|
non sono pratico di shell ed'espressioni regolari quindi non m'è chiaro il commando da te consigliato, sta di fatto che non adempie allo scopo!
|
|
ZioCrocifisso (Member)
Pro
Messaggi: 135
Iscritto: 06/03/2013
|
Il comando è sed (stream editor), non sad, e inoltre, non so dove l'hai trovato, ma è sbagliato in quel modo, anche perché sed non è un semplice sostitutore di espressioni regolari e non avrebbe motivo di usare quella sintassi con / se lo fosse.
Ultima modifica effettuata da ZioCrocifisso il 05/09/2013 alle 16:06 |
|
pistilloi (Normal User)
Newbie
Messaggi: 9
Iscritto: 03/12/2010
|
L'ho trovato nel primo link propostomi da google, questo: http://linux.about.com/od/commands/l/blcmdl1_sed.htm in seguito riporto la descrizione dell'opzione s/regexp/replacement/
Codice sorgente - presumibilmente Delphi |
Attempt to match regexp against the pattern space. If successful, replace that portion matched with replacement. The replacement may contain the special character & to refer to that portion of the pattern space which matched, and the special escapes \1 through \9 to refer to the corresponding matching sub-expressions in the regexp.
|
So che sed (scusa l'errore di battitura) non è un semplice sostitutore di parole, bensì una suite completa per la manipolazione del testo; purtuttavia il commando da te consigliato non produce risultato e poiché io non lo capisco in ogni suo dettaglio non posso neanche darne una motivazione. Tu puoi?
|
|
ZioCrocifisso (Member)
Pro
Messaggi: 135
Iscritto: 06/03/2013
|
Se guardi bene, nel comando che mi hai postato prima, manca la 's' prima del /. Senza di essa, cambia totalmente il significato del comando, perché significa "in ogni riga contenente parola_da_sostituire esegui il comando parola_con_cui_sostituire". Se al posto di parola_con_cui_sostituire non c'era niente, significa che non farà niente. Hai scritto il comando nel modo esatto in cui io l'ho postato? Perché a me funziona, e non vedo perché non dovrebbe.
Codice sorgente - presumibilmente Plain Text |
[nix@localhost tmp]$ echo 'abbarcato/EyT
> abbaruffando/D
> abbaruffare/ALKhlTXI
> abbaruffato/EyT
> Abbasanta
> abbassabile/STU
> abbassalingua/Tq
> abbassamento/OTq
> abbassando/D
> abbassare/ALKhlTXI
> abbassata/QTU
> abbassato/EyT' > a.txt
[nix@localhost tmp]$ sed 's/\/.*//' < a.txt > b.txt
[nix@localhost tmp]$ more b.txt
abbarcato
abbaruffando
abbaruffare
abbaruffato
Abbasanta
abbassabile
abbassalingua
abbassamento
abbassando
abbassare
abbassata
abbassato
|
|
|
pistilloi (Normal User)
Newbie
Messaggi: 9
Iscritto: 03/12/2010
|
Si, mea culpa! Ho perso il senno tra il groviglio di file e gli ho dato in pasto un file vuoto . Grazie dell'aiuto!
|
|