Converte un file csv (comma separated values), preventivamente ottenuto da un foglio elettronico, in una tabella mysql. AVVERTENZE: Prima di operare la conversione a .csv di un foglio elettronico, è bene operare alcune modifiche sullo stesso, che valgono universalmente (indipendentemente, quindi, dall'azione specifica dello script):
PRIMA DI LANCIARE LO SCRIPT, INSERIRE NELLO STESSO LE CREDENZIALI MYSQL!
http://www.slacky.eu/misto/concorso/ninobi/csv2mysql
http://www.slacky.eu/misto/concorso/ninobi/csv2mysql.php
#!/bin/sh
#
# csv2mysql 0.7.10.4 - php-aid
# ----------------------------
# converte un file csv (comma separated values), preventivamente
#+ ottenuto da un foglio elettronico, in una tabella mysql.
# ----------------------------
# ninobi (Antonino Branca) - aschenaz@gmail.com
# 2007 - copyleft
#
#################### CONFIGURAZIONE DELLO SCRIPT #########################
#
# CONFIGURAZIONE MYSQL (OBBLIGATORIA)
#
HO="localhost" # host mysql
US="" # utente mysql
PAW='' # password mysql
# -------------------------------------------------------------
# CONFIGURAZIONE CAMPO IDENTIFICATIVO TABELLA (FACOLTATIVA)
#
IDEN="ID mediumint(8)"
#--------------------------------------------------------------
# CONFIGURAZIONE TIPI CAMPO MYSQL (FACOLTATIVA)
# puoi aggiungerne altri, facendo attenzione alla sintassi...
#
TIPI=( 'tinyint(3) unsigned' 'mediumint(8) unsigned' 'decimal(8,2) unsigned' 'varchar(255)' 'text' )
#
####################### FINE CONFIGURAZIONE ##############################
if [ $# -lt 3 ]; then
echo "*********************************************************"
echo "* *"
echo "* Mancano parametri! *"
echo "* *"
echo "* Devi lanciarlo così: *"
echo "* *"
echo "* ./csv2mysql nomedatabase nometabella nomefilecsv *"
echo "* *"
echo "*********************************************************"
exit 1
fi
DAB="$1"
INDIR="$PWD"
FILECSV="$INDIR/$3"
MYOPDIR=".csv2mysql"
INIFS="$IFS"
#
cd $HOME
if [[ $HO = "" || $US = "" || $DAB = "" ]]; then
echo "*********************************************"
echo "* Devi prima configurare lo script *"
echo "* inserendo i dati di mysql... *"
echo "*********************************************"
cd $INDIR
exit 1
fi
#
echo "**************************************************************************"
echo
echo "csv2mysql - Partecipante al I concorso di bash-scripting - Slacky.eu 2007"
echo "-------------------------------------------------------------------------"
echo "Questo script permette una semplice conversione di un file .csv (comma"
echo "separated values), preventivamente ottenuto da un foglio elettronico, in"
echo "una tabella mysql, che e' anche possibile creare adesso al volo."
echo
echo "Per quanto riguarda il foglio elettronico, ricorda: tutte le righe devono"
echo "essere omogenee (niente righe saltate o irregolari, niente celle unite)"
echo "e la riga delle intestazioni DEVE essere tolta (ricordandosi di annmotare"
echo "le voci da inserire eventualmente come campi della tabella)."
echo
echo "**************************************************************************"
echo
read -p "La tabella $2 esiste già nel database $1? (s/n) ==> " SN1
if [[ $SN1 != "s" && $SN1 != "n" ]]; then
echo "Devi rispondere o 's' o 'n'..."
cd $INDIR
exit 1
elif [ $SN1 = "n" ]; then
echo "-----------------------------------------------------------------------"
echo " La creiamo adesso?"
echo " Considera. pero' che la procedura è necessariamente scarna"
echo " e ci sono alcune limitazioni in merito ai tipi di campo."
echo " Puoi comunque aggiungere tipi nella configurazione dello script."
echo "-----------------------------------------------------------------------"
echo
read -p "Risposta (s/n) ==> " SN2
if [ $SN2 = "n" ]; then
echo "-----------------------------"
echo "Allora crea prima la tabella!"
echo "Arrivederci"
echo "-----------------------------"
cd $INDIR
exit 1
elif [ $SN2 = "s" ]; then
echo "###########################################################"
echo "# ATTENZIONE #"
echo "# Ora ti sarà chiesto di inserire i nomi ed i tipi dei #"
echo "# campi della tabella. Ricorda che i nomi di campo NON #"
echo "# devono contenere spazi, caratteri speciali (tranne _) #"
echo "# o lettere accentate. #"
echo "# ---------------------- #"
echo "# NON bisogna inserire l'ID della tabella: lo script #"
echo "# inserisce automaticamente un ID mediumint(8) in auto- #"
echo "# increment (puoi modificare configurando lo script). #"
echo "# ---------------------- #"
echo "# Per terminare l'inserimento dei campi, digita 'q' #"
echo "# #"
echo "###########################################################"
echo
read -p "Procediamo? (s) ==> " SN3
if [ $SN3 != "s" ]; then
echo "Arrivederci"
cd $INDIR
exit 1
fi
NF=1
[ -d "$MYOPDIR" ] || mkdir $MYOPDIR
echo "CREATE TABLE $2(" > $MYOPDIR/$2.sql
echo "$IDEN unsigned NOT NULL auto_increment PRIMARY KEY" >> $MYOPDIR/$2.sql
while [[ $NMF != "q" ]]; do
echo "==========================================================="
echo " inserisci il nome del campo n. $NF"
echo " per finire digita 'q'"
echo "==========================================================="
echo
read -p "Nome campo $NF ==> " NMF
let "NF += 1"
[ $NMF = "q" ] || echo "," >> $MYOPDIR/$2.sql
[ $NMF = "q" ] && break
echo
echo "==========================================================="
echo "Scegli il tipo del campo $NMF"
echo "----------------------------------"
for NT in 1 2 3 4 5; do
echo "$NT - ${TIPI[$NT-1]}"
done
echo "==========================================================="
echo
read -p "Tipo ==> " T
echo
echo "$NMF ${TIPI[$T-1]}" >> $MYOPDIR/$2.sql
done
echo ");" >> $MYOPDIR/$2.sql
# invoca mysql per la creazione della tabella
mysql -u $US --password=$PAW $DAB < $MYOPDIR/$2.sql
else
echo "Devi rispondere o 's' o 'n'..."
cd $INDIR
exit 1
fi
else
echo "Bene: possiamo procedere!"
echo "-------------------------"
[ -e "$MYOPDIR/$2.sql" ] && > $MYOPDIR/$2.sql
fi
cd $INDIR
# passa la patata bollente al file php che effettua,
#+ di fatto, l'estrazione dei dati dal file .csv
php csv2mysql.php $HO $US $PAW $DAB $2 $FILECSV
echo
echo "------------------------------------------------------------------------------"
echo "LA PROCEDURA E' TERMINATA!"
if [[ $SN3 = "s" ]]; then
echo
echo "Se la tabella non è stata creata,"
echo "controlla la struttura delle query nel file"
echo "$HOME/$MYOPDIR/$2.sql."
fi
echo
echo "Se la tabella non è stata popolata,"
echo "il file csv ha qualcosa di sbagliato."
echo
echo "Arrivederci! :)"
echo "------------------------------------------------------------------------------"
exit 0
#!/usr/bin/php
<?
# csv2mysql.php 0.7.10.1 - php aid
# complemento in php dello script bash csv2mysql
#
# ninobi (Antonino Branca) - aschenaz@gmail.com
# 2007 copyleft
#
$host=$argv[1];$us=$argv[2];$pw=$argv[3];$db=$argv[4];$t=$argv[5];$f=$argv[6];
$c=mysql_connect($host,$us,$pw);mysql_select_db($db);
$handle = fopen($f,"r");
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($data);
$q="INSERT INTO $t VALUES('',";
for ($c=0; $c < $num; $c++) {
$q.="'".addslashes($data[$c])."'";
if($c<($num-1)) $q.=",";
}
$q.=")";
mysql_query($q);
}
fclose($handle);mysql_close();
?>