opendatasicilia / tansignari

"T'ansignari e t'appeddiri"
http://tansignari.opendatasicilia.it
Creative Commons Attribution 4.0 International
18 stars 10 forks source link

[ogr2ogr] come far leggere la lista dei layer da importare da un file di testo #246

Closed pigreco closed 1 year ago

pigreco commented 1 year ago

Il seguente costrutto importa i layer AC_CIC_AC_CIC_SUP_SR AR_VRD_AR_VRD_SUP EDIFC_CR_EDF_IS AR_STR_AR_STR_SUP_SR CANALE_CANALE_BSU da un FileGDB ad un altro:

ogr2ogr -f "OpenFileGDB" -progress x_Andy_only_Polygon.gdb "D:\GitHub\ESRI_FileGeodatabase_GDAL\dati\DBGT_10K_22_V01.gdb" AC_CIC_AC_CIC_SUP_SR AR_VRD_AR_VRD_SUP EDIFC_CR_EDF_IS AR_STR_AR_STR_SUP_SR CANALE_CANALE_BSU  -lco FEATURE_DATASET=sardegna

la lista dei layer da importare è l'output di un altro script che crea un file lista_layer.txt; ho provato ad eseguire il seguente script:

ogr2ogr -f "OpenFileGDB" -progress x_Andy_only_Polygon_pesanti.gdb "D:\GitHub\ESRI_FileGeodatabase_GDAL\dati\DBGT_10K_22_V01.gdb" lista_layer.txt -lco FEATURE_DATASET=sardegna

dove al posto dell'elenco dei layer ho messo il file lista_layer.txt, ma ottengo un errore:

image

il file è presente, ma come ovviare al problema? purtroppo sono sotto windows, c'è un modo di far leggere a ogr la lista dei layer da un file?

pigreco commented 1 year ago

In batch:

image

se utilizzo questi concetti:

ogr2ogr -f "OpenFileGDB" -progress x_Andy_only_Polygon_pesanti.gdb "D:\GitHub\ESRI_FileGeodatabase_GDAL\dati\DBGT_10K_22_V01.gdb" %lista% -lco FEATURE_DATASET=sardegna

errore:

image

pigreco commented 1 year ago

qui qualcosa di utile: https://stackoverflow.com/questions/23521145/is-it-possible-to-pass-system-variables-to-ogr2ogr-in-batch-file

aborruso commented 1 year ago

Ciao @pigreco, in bash hai tanti modi per raccogliere dati da un file esterno e renderli disponibili in uno script.

Uno semplice è questo. Immagina di avere il file lista.txt, che contiene lorem ipsum.

Crea uno script bash e usa una variabile per raccoglierne il contenuto in questo modo

lista=$(<./lista.txt)

A questo punto nello script esplodi la variabile lì dove ti serve

echo "Nell lista ci sono i valori: $lista"

E tu potrai mettere il tuo $lista laddove ti serve. Ricordandoti che la devi fare esplodere, degli eventuali escape, ecc..

Qui sotto uno script ciao mondo.


#!/bin/bash

lista=$(<./lista.txt)

echo "Nella lista ci sono i valori: $lista"
pigreco commented 1 year ago

Grazie @aborruso farò ulteriori test, ma sottolineo che sono su batch e non su bash

aborruso commented 1 year ago

farò ulteriori test, ma sottolineo che sono su batch e non su bash

Ok, leggevo il subject e pensavo che non avessi vincoli di ambiente. Mi spiace

pigreco commented 1 year ago

altro link utile: https://stackoverflow.com/questions/3068929/how-to-read-file-contents-into-a-variable-in-a-batch-file/3069068#3069068

pigreco commented 1 year ago

utilizzando quanto spiegato in questo link ovvero creare la variabile in questo modo:

image sembrerebbe ok, ma nel costrutto con org non va:

image credo sia dovuto al fatto che la variabile racchiuda il testo tra virgolette.

agiudiceandrea commented 1 year ago

@pigreco qual è esattamente il contenuto del file lista_layer.txt? Da quello che vedo sembra che esso contenga già le virgolette.

pigreco commented 1 year ago

qual è esattamente il contenuto del file lista_layer.txt?

lista_layer.txt

pigreco commented 1 year ago

@agiudiceandrea stamani rifaccio tutto:

  1. set /p lista2=<lista_layer.txt
  2. ogr2ogr -f "OpenFileGDB" -progress x_Andy_only_Polygon_pesanti.gdb "D:\GitHub\ESRI_FileGeodatabase_GDAL\dati\DBGT_10K_22_V01.gdb" %lista2% -lco FEATURE_DATASET=sardegna

funziona!!! image

agiudiceandrea commented 1 year ago

Eseguendo il comando: set /p lista2=<lista_layer.txt e poi echo %lista2% ottengo

CL_AGR_CL_AGR_SUP AATT EDIFC_CR_EDF_ME_SR EDIFC_CR_EDF_ME EDIFC_CR_EDF_IS BOSCO_BOSCO_SUP_SR BOSCO AC_VEI_AC_VEI_SUP_SR AR_STR_AR_STR_SUP_SR EDI_MIN_C
R_EDF_ME_SR EDI_MIN_CR_EDF_ME EDI_MIN_CR_EDF_IS ELE_CP AC_VEI

non:

"CL_AGR_CL_AGR_SUP AATT EDIFC_CR_EDF_ME_SR EDIFC_CR_EDF_ME EDIFC_CR_EDF_IS BOSCO_BOSCO_SUP_SR BOSCO AC_VEI_AC_VEI_SUP_SR AR_STR_AR_STR_SUP_SR EDI_MIN_C
R_EDF_ME_SR EDI_MIN_CR_EDF_ME EDI_MIN_CR_EDF_IS ELE_CP AC_VEI"

come nel tuo esempio.

agiudiceandrea commented 1 year ago

Quindi, quando hai eseguito il comando precedentemente e non ha funzionato, il file lista_layer.txt conteneva la stringa dei nomi dei layer racchiusa tra virgolette.

agiudiceandrea commented 1 year ago

L'"espansione" delle variabili nel command prompt di Windows non aggiunge virgolette al valore della variabile.

pigreco commented 1 year ago

@agiudiceandrea prima di scrivere una issue faccio molti test e ti assicuro che le ho provate tutte, con apici e senza apici, forse quel screenshot riguardava il test con apici.

Stamani funziona, non so il perché, ti assicuro che avevo provato senza virgolette anche perché, il file lista_layer.txt è un output di un altro script.

Grazie per il tempo che ci hai dedicato.

agiudiceandrea commented 1 year ago

Stamani funziona, non so il perché,

Evidentemente nelle varie prove che hai fatto c'è stata una svista e hai dimenticato di eliminare di virgolette che avevi aggiunto oppure hai dimenticato di riassegnare la variabile dopo aver eliminato le virgolette che avevi aggiunto o dopo aver ricreato il file senza virgolette...

pigreco commented 1 year ago

Ricetta fatta e pubblicata:

https://tansignari.opendatasicilia.it/ricette/bash/lista_layer_da_file_txt/