Come importare un file di testo in FileMaker

Negli articoli precedenti abbiamo visto come gestire l'importazione dati in FileMaker a partire da una varietà di formati, tra cui il formato Excel.

Ma cosa succede quando dobbiamo importare un file di testo senza delimitatori specifici contenente un tracciato record?

Importare un file di testo in FileMaker

Importare un file di testo con queste caratteristiche non è certo una possibilità remota: capita spesso di trovarsi a decifrare un file generato da un sistema semiautomatico in cui ad ogni riga corrisponde un record ma i valori dei campi sono riportati senza soluzione di continuità.

Per fortuna, questo tipo di file viaggia quasi sempre insieme alla documentazione, una sorta di mappa che ci permette di capire cosa inserire e dove.

Ad esempio ci può capitare di leggere:

nome campo inizio caratteri
cognome 1 15
nome 16 10
telefono 27 10

In questo caso non dobbiamo fare altro che importare il file utilizzando un unico campo testo. In pratica ogni riga del nostro file genererà 1 record e tutto il contenuto della riga finirà nel campo testo generale riga_txt. Starà a noi andare a popolare i campi giusti, via script o calcoli, utilizzando le funzioni Mezzo()., Sinistra() e Destra(). Nell'esempio, utilizzeremo Sinistra(riga_txt;15) per identificare il cognome, Mezzo(riga_txt; 16; 10) per il nome e così via.

Eseguire le operazioni proposte in fase di importazione è sicuramente una grande comodità, e porta ad una sensibile riduzione di dimenticanze o errori. Tuttavia, per motivi legati alla scrittura sul file, la procedura più veloce è quasi sempre quella di importare il file senza eseguire le operazioni proposte, inserendo i dati richiesti in un secondo momento.

Ovviamente per poche righe non si avverte la differenza, ma quando la mole di dati diventa corposa il risparmio di tempo inizia a farsi consistente. In questi casi vanno valutati con attenzione bonus e malus, soprattutto se l'importazione viene effettuata via script, lanciato dall'utente o addirittura in forma totalmente automatizzata da FileMaker Server.

Gestire Importa record via script

Il comando Importa record è infatti gestibile anche via script. Normalmente si tratta di una di queste due situazioni:

  1. Vogliamo gestire l’operazione in modo del tutto manuale: selezionare il file origine, impostare la mappatura, il tipo di import, etc. In questo caso alla riga script Importa record NON occorre specificare nulla (né il file di destinazione né l’ordine di importazione, opzioni in basso a destra). La procedura guidata viene eseguita per come è stata descritta.
  2. Vogliamo gestire l’operazione in modo manuale limitandoci a selezionare il file, lasciando quindi a FileMaker tutte le altre incombenze. Pensiamo ad esempio ad una procedura destinata ad utenti non particolarmente esperti in campo informatico. In questo caso nel nostro script dobbiamo selezionare il file di origine utilizzando l’opzione Specifica origine dati, e successivamente impostare i criteri di importazione mediante l’opzione Ordine di importazione). Una volta salvato lo script, FileMaker si ricorderà queste impostazioni e ce le proporrà. A questo punto possiamo decidere di fare un passo ulteriore, selezionando in basso a sinistra il comando Esegui senza finestra (vedi figura). In questo caso è fortemente consigliato inserire qualche controllo di sicurezza sulla sorgente dati o sull'importazione, per assicurarsi che il file scelto dall'utente sia effettivamente quello che dovrebbe essere e onde evitare di importare nella rubrica le rate del mutuo.

immagine 6

L'operazione deve essere totalmente automatica, lanciata dall'utente con un “clicca e dimentica” oppure direttamente mediante uno script di FileMaker Server, temporizzato o attivato da remoto. In questo scenario non solo dobbiamo prevedere tutto quanto riportato al punto 2, ma dobbiamo anche specificare a FileMaker il percorso del file.

FileMaker utilizza una sua sintassi per gestire file ed immagini, ed è la seguente:

file…
filemac
filewin
imagemac
imagewin
fmnet

Vediamo nel dettaglio come funziona la sintassi sopra riportata, che deve essere usata nella finestra di dialogo che appare cliccando sul riquadro Specifica origine dati (vedi immagine sottostante).

Immagine7

file

Questo prefisso viene utilizzato per creare un percorso con il quale arrivare ad un file che sta all’interno della cartella in cui è situato il database. In altri termini, con il comando file possiamo andare a selezionare esclusivamente i file che si trovano nella directory in cui c’è il database, o in sue sottocartelle.

Esempio: partiamo dalla premessa che il nostro database si trova nella cartella MacHD:/Lavoro/database (o nella versione Win C:/Lavoro/database). Usando la sintassi file:file_da_importare.xls, FileMaker riuscirà a trovare (e quindi ad importare) il contenuto di file_da_importare.xls solo se questo si trova nella cartella Lavoro/database o in una sottocartella di Lavoro/database. Nel caso in cui file_da_importare.xls si trovasse sulla scrivania, FileMaker non riuscirebbe a trovarlo.

Tecnicamente con la sintassi file di parla di percorso relativo, ovvero di un percorso che parte, in discesa, dalla posizione del database. Se il database non è aperto in locale ma da remoto, la partenza è la directory in cui è installato FileMaker.

filemac o filewin

Questi prefissi sono specifici per i due diversi sistemi operativi, e servono per raggiungere in modo mirato ed esatto un determinato file. Riprendendo l’esempio sopra riportato, la sintassi corretta filemac e filewin è così rappresentata:

  • filemac: MacHD:/Lavoro/database/ file_da_importare.xls
  • filewin: C:/Lavoro/database/ file_da_importare.xls

Tecnicamente con la sintassi filemac o filewin si parla di percorso assoluto, ovvero di un percorso che parte dal livello superiore del file system per arrivare a qualsiasi directory.

imagemac o imagewin

Vale quanto detto a livello di specifica di percorso per filemac o filewin.

La particolarità è che queste imagemac o imaginewin vanno usati se si tratta di importare o inserire file pdf o immagini.

fmnet

Questo prefisso va usato quando si rende necessario arrivare ad un file condiviso di fmp12 ospitato su Host, del quale necessariamente conosciamo l’indirizzo IP.

Tecnicamente si parla in questo caso di percorso di rete. Un esempio potrebbe così essere rappresentato:

fmnet:/192.168.1.120/database_lavoro.fmp12

Nota bene: nella finestra di Specifica file sopra riportata è possibile (nonchè caldamente suggerito) indicare più di un percorso. Ad esempio, non sapendo se l’utente userà un Mac o un PC win, è buona norma prevedere i 2 percorsi assoluti sotto le 2 diverse forme (filemac e filewin). In caso di più percorsi, FileMaker procederà a verificarli: se il primo non è valido, passerà al secondo, poi al terzo e così via.

Suggerimento: per evitare di dover prevedere in modo statico tutti i possibili percorsi elencando tutte le casistiche,  un'alternativa comoda ed efficace è rappresentata dall'utilizzo delle variabili. In tal modo, al posto di prevedere i due percorsi

  • filemac: MacHD:/Lavoro/database/ file_da_importare.xls
  • filewin: C:/Lavoro/database/ file_da_importare.xls

possiamo prevedere nello script, prima del comando Importa record, la seguente variabile:

Imposta variabile [$percorso; valore:if (Get (Piattaformasistema) = -2; "filewin: C:/Lavoro/database/ file_da_importare.xls"; filewin: C:/Lavoro/database/ file_da_importare.xls

Mettendo quindi nella lista percorsi file la variabile $percorso FileMaker assegnerà alla variabile il corretto percorso in funzione della piattaforma che andremo ad usare.

Istruzioni di controllo: perchè è utile inserirle

In tutti i casi di importazione via script il consiglio è di prevedere l'insorgere di un errore a qualche stadio della procedura, dal file non trovato ad una cancellazione da parte dell'utente. In questo caso è necessario gestire l'interruzione, per evitare che le istruzioni successive effettuino nuove operazioni causando ulteriori danni.

Supponiamo ad esempio che nel nostro script, dopo l’importazione dei record, siano previste altre operazioni al nuovo foundset. Se non gestiamo l'interruzione, rischiamo di fare aggiornamenti o modifiche a record che non sono quelli previsti.

Per evitare questa situazione è bene mettere dopo il comando Importa record e i punti principali dello script una istruzione di controllo. Possiamo utilizzare l'utile funzione di ricavo get(ultimoerrore): nel caso di operazione annullata, lo script sotto riportato fa uscire dallo script stesso. Inoltre rende possibile gestire due flussi di istruzioni separati a seconda di una importazione corretta o meno.

Imposta cattura errori [attiva]

Importa Record [….]

If [Get (ultimoErrore) = 1]

Esci dallo script []

End if

Per il comando Import per ora è tutto. Nei prossimi articoli vedremo come si comporta FileMaker con l'operazione inversa: l'esportazione record.

Qual è il tuo segreto per una importazione senza intoppi? Condividi gioie e dolori del comando Import record con i nostri Guru: scopri la community FileMaker su Guru Corner!




Pietro Lazzarini

Cerca
Prendi la corsia preferenziale e risolvi i tuoi problemi di sviluppo FileMaker!

Risorse gratuite

Guru Corner

Altri articoli di Pietro Lazzarini

Ultimi articoli