GNU/Linux ….. nel ns dizionario non esite il termine IMPOSSIBILE!!
Written by Federico Sette
Thursday, 18 June 2009 18:16
There are no translations available.
ebbene si … tra le altre cose oggi sono 35! Cosa? Anniiiiiii
Vabbè … parliamo di cose serie. Non di montagna oggi, quindi di informatica! Proprio ieri l’altro mi è stato posto da un cliente questo interessante problema: “ho circa 170 fatture si può avere una prima nota?”
Traduco: tempo fa gli preparo un modello OOo per le fatture. Ora si vorrebbe raggruppare in un unico file “solo” il numero fattura, la data, il nome e l’importo. Cioè alcuni dati di molti file in un unico file.
Cerco … leggo .. studio .. manuali … internet … ma niente .. non trovo nulla che mi sia d’aiuto.
Poi trovo una utility: JODConverter …. che fa? Più o meno converte tutto in tutto. A questo punto capisco che la mia unica strada è il bash script!
L’idea è questa:
rimuovo gli spazi dai nomi file (cosa che per altro mi ha fatto perdere un po’ di tempo .. causa errori strani!!!)
converto tutti i file xls (o ods è indifferente) in csv con l’utility (necessita di OOo in background)
estrapolo i dati che mi servono da ogni file (quindi ciclo)
assemblo un nuovo csv con i dati estratti …. divisi da ; perchè la virgola potrebbe essere presente neglio importi
apro il file con calc e lo salvo come ods (o xls … )
il risultato è questo scriptino:
#!/bin/sh # Script Bash by F3d7 # # Prima nota: lo scipt converte i file ODS e/o XLS in CSV # estrae da questi il numero fattura, la data, il nome e l’importo # li assembla in un nuovo file CSV pronto per CALC # # Release 0.0.2 # del 3/7/2008 # # Enjoy!!!!!!!!! # # # elimino gli spazi dei file echo “##### Prima Nota 1.0 ####” echo “by F3d7″ # echo “Rimuovo gli spazi” percorso=$PWD echo “Nome cartella?” read cartella cd $percorso”/”$cartella for nomefile in * do mv “$nomefile” $(echo “$nomefile” | tr ” ” “_”) done # echo “Fatto!! Ho rimosso gli spazi dai nomi dei file ;)” # converto i file xls e/o ods in csv echo “I file sono XLS o ODS? Digita xls o ods!!!” read formato soffice -headless -accept=”socket,host=127.0.0.1,port=8100;urp;” -nofirststartwizard& #lancia OOo in background java -jar /home/fedsette/Download/jodconverter-2.2.1/lib/jodconverter-cli-2.2.1.jar -f csv *.$formato #converte tutti i file in csv # kill del processo che converte in CSV var=`ps ax | grep port=8100 | grep -v grep | grep -v etc | awk ‘{print $1;}’` kill $var # mkdir tmp mv *.csv ./tmp/ cd tmp # estraggo le righe che mi interessano for nomefile2 in * do riga_numero=`sed -n ‘5p;5q’ “$nomefile2″` # con sed estraggo la riga riga_data=`sed -n ‘9p;9q’ “$nomefile2″` riga_nome=`sed -n ‘13p;13q’ “$nomefile2″` riga_importo=`sed -n ‘38p;38q’ “$nomefile2″` # # estraggo i valori # numero_tmp=`expr substr “$riga_numero” 44 10` data_tmp=`expr substr “$riga_data” 39 10` nome_tmp=`expr substr “$riga_nome” 16 25` importo_tmp=`expr substr “$riga_importo” 22 15` # # rimuovo virgolette e altro # numero=`echo ${numero_tmp%’”‘*’,'}` data=`echo ${data_tmp%’”‘*’,'}` #rimuove virgolette e virgola dal fondo nome=`echo ${nome_tmp%’”‘*’,'}` importo_pre=`echo ${importo_tmp%’”‘*”}` #soluzione due per rimuovere le virgolette importo=`echo ${importo_pre#”*’”‘}` # esporto i risultati solo per test echo $numero echo $data echo $nome echo $importo riga=$numero’;'$data’;'$nome’;'$importo echo $riga >> prima_nota.csv done echo “File CSV generato” # apro in OOo soffice prima_nota.csv # # # End!!!!!