#1 Wed 15 September 2010 08:39
- ppluvinet
- Participant assidu
- Lieu: VALENCE
- Date d'inscription: 6 Aug 2007
- Messages: 628
Postgresql : importer tous les fichiers d'un dossier
Bonjour,
Je suis quasiment sûr que le sujet a déjà été abordé mais je n'arrive pas à le retrouver.
Je souhaite, par l'intermĂ©diaire d'un .bat sous windows, importer tous les shapes(avec SHP2PGSQL) ou tous les fichiers CSV (avec COPY ou INSERT) d'un mĂȘme rĂ©pertoire sans avoir Ă donner le nom de chacun mais seulement le nom du dossier.
Sous Linux, il me semble que ca ressemble Ă ceci pour l'import de shp:
Code:
for i in $(find . | grep shp);do shp2pgsql -dDI $i $(basename $i .shp) | psql madatabase;done
Merci d'avance
Pascal PLUVINET
Hors ligne
#2 Wed 15 September 2010 09:32
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1566
Re: Postgresql : importer tous les fichiers d'un dossier
Bonjour,
Je suis quasiment sûr que le sujet a déjà été abordé mais je n'arrive pas à le retrouver.
Je souhaite, par l'intermĂ©diaire d'un .bat sous windows, importer tous les shapes(avec SHP2PGSQL) ou tous les fichiers CSV (avec COPY ou INSERT) d'un mĂȘme rĂ©pertoire sans avoir Ă donner le nom de chacun mais seulement le nom du dossier.
Sous Linux, il me semble que ca ressemble Ă ceci pour l'import de shp:Code:
for i in $(find . | grep shp);do shp2pgsql -dDI $i $(basename $i .shp) | psql madatabase;doneMerci d'avance
Bonjour,
Une rapide recherche google: http://jamesewelch.wordpress.com/2008/0 … ugh-files/![]()
Remplacer do call ... par do call shp2pgsql ...
Nicolas
Hors ligne
#3 Wed 15 September 2010 10:10
Re: Postgresql : importer tous les fichiers d'un dossier
Bonjour,
La solution "toute cuite" ci-dessous, la rĂ©ponse de Nicolas prĂ©sentant l'intĂ©rĂȘt d'expliquer le raisonnement (une autre ressource est la FAQ batch windows de Developpez http://windows.developpez.com/faq/batch/ )
Code:
for /F "usebackq" %%i in (`dir /B *.shp`) do shp2pgsql -s codeepsg -dDi %%i %%~ni | psql votre_base
Si vous avez un problÚme d'encodage (que votre base est en utf-8 et que votre shp est en latin1 par exemple), récupérez iconv sur http://gnuwin32.sourceforge.net/packages/libiconv.htm puis rajouter l'exécutable à votre PATH
La commande sera alors
Code:
for /F "usebackq" %%i in (`dir /B *.shp`) do shp2pgsql -s codeepsg -dDi %%i %%~ni | iconv -f LATIN1 -t UTF-8 -c | psql votre_base
Cordialement
ThomasG
Dernière modification par ThomasG (Wed 15 September 2010 10:12)
Hors ligne
#4 Wed 15 September 2010 11:19
- ppluvinet
- Participant assidu
- Lieu: VALENCE
- Date d'inscription: 6 Aug 2007
- Messages: 628
Re: Postgresql : importer tous les fichiers d'un dossier
Merci, c'est exactement ce que je cherchais !
Pascal PLUVINET
Hors ligne
#5 Wed 15 September 2010 11:27
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1566
Re: Postgresql : importer tous les fichiers d'un dossier
Bonjour,
La solution "toute cuite" ci-dessous, la rĂ©ponse de Nicolas prĂ©sentant l'intĂ©rĂȘt d'expliquer le raisonnement (une autre ressource est la FAQ batch windows de Developpez http://windows.developpez.com/faq/batch/ )Code:
for /F "usebackq" %%i in (`dir /B *.shp`) do shp2pgsql -s codeepsg -dDi %%i %%~ni | psql votre_baseSi vous avez un problÚme d'encodage (que votre base est en utf-8 et que votre shp est en latin1 par exemple), récupérez iconv sur http://gnuwin32.sourceforge.net/packages/libiconv.htm puis rajouter l'exécutable à votre PATH
La commande sera alorsCode:
for /F "usebackq" %%i in (`dir /B *.shp`) do shp2pgsql -s codeepsg -dDi %%i %%~ni | iconv -f LATIN1 -t UTF-8 -c | psql votre_baseCordialement
ThomasG
Concernant les encodages, shp2pgsql a une option, -W, permettant de preciser l'encodage du fichier shape, et donc de realiser la conversion.
Nico
Hors ligne
#6 Wed 15 September 2010 12:14
- ppluvinet
- Participant assidu
- Lieu: VALENCE
- Date d'inscription: 6 Aug 2007
- Messages: 628
Re: Postgresql : importer tous les fichiers d'un dossier
Mon but Ă©tait d'importer et assembler de maniĂšre automatique un nombre important de shape se trouvant dans un mĂȘme rĂ©pertoire.
Voici le fichier .bat que j'ai créé et qui fonctionne :
Code:
@echo off
mode con LINES=3500 COLS=100
color F1
cd D:\monrepertoire
dir /B *.shp > liste.txt
for /f "tokens=1,* delims=:" %%i in ('findstr /n /r . liste.txt') do (
echo %%i
echo %%j
if %%i equ 1 (shp2pgsql -W LATIN1 -s 4326 -dDI %%j schema.nomtable| psql -U admin let)
if %%i geq 2 (shp2pgsql -W LATIN1 -s 4326 -aD %%j schema.nomtable | psql -U admin let)
ping 0.0.0.0 -n 1 > NUL
)
echo "import fini"
ping 0.0.0.0 -n 30 > NULLe premier IF va créer la nouvelle table et ajouter les données du premier shp.
Le deuxiĂšme IF ajoute les donnĂ©es des autres shp dans la mĂȘme table.
Les PING sont juste des temporisations accessoires.
On récupÚrera dans liste.txt la liste des fichiers shp.
Merci Ă vous de m'avoir mis sur les bonnes pistes
Pascal PLUVINET
Hors ligne
#7 Wed 15 September 2010 12:42
Re: Postgresql : importer tous les fichiers d'un dossier
Salut,
Merci pour la piqûre de rappel sur l'option -W , je l'avais zappé alors que ce n'est pas faute que d'autres l'expliquent...
http://www.neogeo-online.net/blog/archives/74/ ou http://postgis.refractions.net/docs/ch0 … gsql_usage
ThomasG
Dernière modification par ThomasG (Wed 15 September 2010 16:48)
Hors ligne
#8 Wed 15 September 2010 13:01
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1566
Re: Postgresql : importer tous les fichiers d'un dossier
Salut,
Merci pour la piqûre de rappel sur l'option W , je l'avais zappé alors que ce n'est pas faute que d'autres l'expliquent...
http://www.neogeo-online.net/blog/archives/74/ ou http://postgis.refractions.net/docs/ch0 … gsql_usage
ThomasG
De nada ![]()
Oui, elle est bien pratique, surtout sous Windows justement, ou iconv n'est pas disponible.
Hors ligne

