#1 Wed 15 September 2010 08:39
- ppluvinet
- Participant assidu
- Lieu: VALENCE
- Date d'inscription: 6 Aug 2007
- Messages: 617
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: 1554
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: 617
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: 1554
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: 617
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 > NUL
Le 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: 1554
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