File di dati

pTabs2 può gestire dati in formato SPSS, PSPP, XPORT (SAS), CSV, Xlsx, Nipo Odin, Triple-S, Pulsar/Galileo, Testo, Access, SQLite e ODBC.

Metodi

Alcuni metodi (funzioni) sono comuni a più fonti di dati. Lo stesso metodo può accettare parametri differenti in relazione alla specifica fonte di dati.

Fonte dati Driver Estensione open get save labels translations edit copy add join convert exec
SPSS spss sav X X X X              
PSPP spss sav X X X X              
SAS xport xpt X X                  
Excel (XLSX) xlsx xlsx X X X X X X X X X X  
CSV csv csv X X X X X            
Nipo Odin/Diana odin dat / var X X                  
Triple-S sss asc / xml X X X                
Pulsar-Galileo pulsar dat / vat     X                
Testo fwf dat X X X                
ODBC odbc   X X X X             X
SQLite sqlite db X X X X             X
Access (ACCDB) accdb accdb X X                  

config

Permette di preimpostare alcuni parametri del driver in modo da non doverli specificare nelle successive istruzioni.

1
2
3
4
odbc.config :db => "dbname", :uid => "user", :pwd => "password"

odbc.open :table => "table1"
odbc.save :table => "table2"

Attenzione

Attenzione: se l’estensione del file non è quella standard o se il nome del file contiene degli spazi, è necessario specificare il nome del file completo di estensione, altrimenti è sufficiente utilizzare il nome senza estensione.

open

Carica una fonte di dati in un dataset e lo rende disponibile a pTabs2.

Argomenti:

  • filename|[filelist]: il nome del file da caricare. Se specificato un vettore di nomi di file, i file verranno aperti e accodati nello stesso dataset
  • :keep => [varlist]: l’elenco di variabili da includere
  • :drop => [varlist]: l’elenco di variabili da escludere
  • :n => # specifica il numero di righe da leggere (default: tutti i record)
  • :labels => name il nome del file/foglio/tabella contenente le etichette e altri metadati
  • :start => # specifica il numero di riga da cui incominciare a leggere i dati (default: 1)
  • :skipstring => true|min_string_size: esclude le variabili stringa (true) o le variabili stringa a partire da una certa dimensione (min_string_size) [spss, csv, ****]
  • :rowlabel => # specifica il numero di riga che contiene le etichette delle variabili [csv, xlsx]
  • :missing => :ignore: non considera la definizione dei valori mancanti [spss]
  • :hi => #: il valore da sostituire a HI nei missing values [spss]
  • :lo => #: il valore da sostituire a LO nei missing values [spss]
  • :ws => :sym: il nome (simbolo) del workspace in cui caricare i dati
  • :bk => true|false: false (default) attiva il workspace in cui vengono caricati i dati; true non attiva il workspace (background)
  • :lazy => true: caricarica le variabili solo quando vengono effettivamente richieste dallo script [spss]
  • :union_mode => :left|:right|:union|:inter|:diff: definisce l’insieme di variabili del dataset risultante in caso di union di file multipli
  • :source_id: genera una variabile che identifica i casi provenienti da un file, utile principalmente nel caso di union di file multipli:
    • :source_id => :file: definisce una variabile stringa chiamata file contenete il nome del file di dati
    • :source_id => varname: definisce una variabile numerica con il nome dato contente un valore progrsssivo che identifica il file
    • :source_id => {:name => :varname, :label => String, :levels => Array|Hash}: definisce nome e etichette della variabile (nei livelli è possibile indicare qualsiasi codice)
  • &block: alcuni driver [spss, xlsx] accettano un blocco in cui eseguire istruzioni relative al dataset

open!

Come open, ma assegna il dataset a un workspace con lo stesso nome del nome del file.

get

Legge un file di dati e lo trasforma in un oggetto accessibile in modo simile a un foglio elettronico. I dati devono avere una struttura a matrice. I dati non sostituiscono il dataset attivo e non sono disponibili per l’elaborazione e la tabulazione.

Utilizza gli stessi argomenti di open.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
 data = spss.get "coding"

 p data.fields                 # le intestazioni
 p data.matrix                 # i dati come vettore di vettori di riga
 p data.row(1)                 # la prima riga di dati come vettore (la numerazione delle righe parte dalla prima riga di dati)
 p data.record(1)              # la prima riga di dati come hash di nome campo / valore (la numerazione delle righe parte dalla prima riga di dati)
 p data.column(1)              # una colonna di dati per numero di colonna
 p data.column("A")            # una colonna di dati per lettera di colonna
 p data.column("varname")      # una colonna di dati per nome di variabile
 p data.column(:varname)       # una colonna di dati per nome di variabile
 p data["A5"]                  # una cella di dati (la numerazione delle righe parte dalla prima riga di dati)
 p data[5,1]                   # una cella di dati (la numerazione delle righe parte dalla prima riga di dati)
 p data.to_h                   # converte i dati in un hash dove la chiave è il dato della prima colonna e il valore il contenuto restante della riga

save

Salva i dati del dataset attivo. Se è attivo un fitro verranno salvati solo i dati filtrati.

Argomenti:

  • il nome del file in cui salvare i dati
  • :keep => [varlist]: l’elenco di variabili da includere
  • :drop => [varlist]: l’elenco di variabili da escludere
  • :alt_name => false|true: utilizza i nomi alternativi (se presenti) come nomi delle variabili (default false)
  • :ws => :name: genera una copia del dataset salvato nel workspace :name, mantenento, eventualmente, lo stesso subset di righe e colonne
  • &block: un blocco in cui eseguire istruzioni relative al dataset che verrà salvato. La presenza di un blocco potrebbe rallentare le operatrazioni su file di grandi dimensioni in quanto comporta la copia in memoria di tutto il dataset

label

Carica le etichette delle variabili e altri metadati e le applica al dataset attivo.

Argomenti:

  • il nome del file da caricare

translations

Carica un dizionario di traduzioni. Vedi Internazionalizzazione.

Argomenti:

  • il nome del file da caricare

edit

Apre un file e permette di modificarne il contenuto. Attualmente è disponibile soltanto per i file xslx.

Vedi Aggiornamento file Xlsx

Altri metodi specifici di alcuni formati sono specificati nella sezione relativa alla fonte di dati.

<<

SPSS System File

spss gestisce dati in formato SPSS.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
 spss.open "nome_file"

 spss.open "nome_file.sf"    # estensione non standard
 spss.open "nome file.sav"   # spazio nel nome

 spss.open "nome_file2", :ws => :tojoin do
   rename [:d1, :d2, :d3] => [:v1, :v2, :v3]
   delete :d100
 end

 spss.save "nome_file", :keep => [:sesso, :eta, :area, :ipf, :espcam, :espuni]

 spss.save "nome_file" do
   rename rename :area => :mcr
   select "sex=1"
   sort :serial
 end

 spss.save "nome_file", :string_width => :print  # forza le stringhe a usare il formato di stampa

spss.labels

Il metodo labels di spss utilizza un normale file di dati .sav da cui copia le informazioni delle variabili nelle corrispondenti variabili del file attivo.

Suggerimento

ViewSav, a viewer for SPSS data files è un programma free particolarmente utile per visualizzare velocemente il contenuto dei file di dati SPSS.

Suggerimento

PSPP è un programma free che permette di generare e gestire file di dati SPSS.

<<

GNU PSPP

PSPP (GNU PSPP) è un clone open-source di SPSS. Sebbene non supporti tutte le caratteristiche di SPSS, ha la stessa sintassi di base e scrive i dati nello stesso formato, pertanto valgono tutte le osservazioni e le istruzioni fornite per SPSS.

<<

SAS Transport File

xport legge dati SAS esportati in formato Transport File (XPORT). Il file XPORT deve contenere un solo dataset oppure un dataset con i dati seguito da un dataset con i formati e etichette che verranno applicate alle variabili.

I nomi delle variabili vengono convertiti in minuscolo.

1
 xport.open "nome_file"

Suggerimento

Se si ha accesso a un’istanza locale di SAS o a un server SAS/SHARE, è possibile usare il driver SAS ODBC per connettersi e leggere dalle librerie di dati SAS.

<<

Xlsx

xlsx gestisce file Excel nel formato XLSX.

Il file deve contenere i nomi delle variabili nella prima riga del foglio di lavoro. Se non viene specificato il nome del foglio di lavoro, si assume che il nome sia uguale al nome del file.

save

Con xlsx.save, oltre al foglio dei dati è possibile salvare un ulteriore foglio con le etichette delle variabili e uno con la legenda.

Argomenti aggiuntivi:

  • :ws => ws_name|[ws_name_list]|:all: esporta il workspace o i workspaces indicati (default il workspace attivo)

  • :sheets => [:values, :labels, :codebook, :formats] permette di esportare più fogli (default: [:values, :codebook]):

    • :values: foglio con i valori
    • :labels: foglio con i valorei sostituiti dalle etichette, ove presenti
    • :codebook: foglio con la legenda/le etichette delle variabili
    • :formats: foglio come in :codebook, ma con in aggiunta i formati

    E’ possibile indicare anche il nome del foglio utilizzando un hash invece di un array: {:values => "db", :codebook => "Legenda"}.
    Nel caso di più workspace (:ws), è possibile indicare più nomi: {:values => ["DB1", "DB2"], :codebook => ["CB1", "CB2"]}.

  • :info => [:order, :type, :size, ...] permette di aggiungere ulteriori colonne di informazioni al codebook

  • :include => [:string, :integer, :float] inserisce nel foglio codebook anche i valori di variabili senza etichette

  • :links => true|false: attiva (true il default) o disattiva (false) i link alle variabili tra i diversi fogli

  • :na => value: specifica un valore (numerico o stringa) da inserire al posto dei valori mancanti (blank).

  • :freeze => ref: la posizione rispetto a cui bloccare lo scorrimento dei fogli (default: B2 blocca la prima riga e la prima colonna). Esempi: A1 non blocca nulla; A2 blocca solo la prima riga; D3 blocca le prime due righe e le prime tre colonne.

  • :zoom => perc: imposta la percentuale di zoom dei fogli

  • :filter => true|false: attiva (default)/disattiva i filtri nelle colonne dei fogli

  • :maxw => [w_dati, w_label, w_cb]: l’ampiezza massima delle colonne del foglio dati, del foglio valori e del codebook (default: [20, 20, 100])

  • :widths => []: un vettore con le ampiezze delle colonne dei fogli dei dati. Se viene indicato un solo numero, verrà utilizzato per tutte le colonne. Se vengono indicate meno ampiezze rispetto alle colonne, l’ultimo numero verrà utilizzato per le restanti colonne.

  • :cbwidths => []: un vettore con le ampiezze delle colonne del codebook.

  • :vheader => :name|:label|:both determina l’intestazione delle colonne per il foglio dei valori:

    • :name: il nome della variabile (il default);
    • :label: l’etichetta della variabile;
    • :both: entrambe.
  • :lheader => :name|:label|:both: determina l’intestazione delle colonne per il foglio delle etichette:

  • :join_labels => false|true: nel caso di vheader: :both o lheader: :both, non ripete le etichette uguali delle variabili (default: false)

  • :nolevel => :value|:none: nel foglio delle etichette, se i livelli sono incompleti riporta il valore (:value default) o blank (:none)

  • :labelcol => true|:name|:label|:same|'suffix': nel foglio dei valori, quando nella variabile sono presenti le etichette dei valori, aggiunge una colonna con le etichette. L’intestazione della colonna è definita da:

    • true: aggiunge "_label" al nome della variabile;
    • :name: il nome della variabile;
    • :label: l’etichetta della variabile;
    • :same: utilizza la stessa intestazione della colonna dei valori;
    • 'suffix': aggiunge il suffisso specificato al nome della variabile.
  • :head => [[]]: aggiunge una o più righe di intestazione in testa ai fogli dati

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
 xlsx.save "nome_file", :keep => [:sesso, :eta, :area, :ipf, :espcam, :espuni],
                        :sheet => "nome_foglio"

 xlsx.save "nome_file", :sheets => [:values, :labels], :na => "__NO_ANSWER__"
 xlsx.save "nome_file", :sheets => [:values, {:labels => "Etichette"}, {:codebook => "Legenda"}], :nolevel => :none
 xlsx.save "nome_file", :sheets => {:labels => "Etichette", :codebook => "Legenda"}

 xlsx.save 'mix', :sheets => :values, :addlabels => "_str"

 xlsx.save "report", :sheets => {:values => "Risultati"},
  :vheader => :label,
  :widths => [25, 25, 10, 12],
  :head => [
    [{:value => "Osservatorio mensile", :colspan => 11, :style => :headtitle}],
    [nil, nil, nil, {:value => "2° Semestre", :colspan => 4}, {:value => "YTD", :colspan => 4}]
  ]

xlsx.codebook salva direttamente solo il foglio codebook.

1
 xlsx.codebook "label", :include => :string, :drop => [:indirizzo, :nome]

open

xlsx.open apre una matrice di dati. I dati verranno etichettati se indicato il parametro :labels oppure :labeldata.

Argomenti aggiuntivi:

  • :na => value|valuelist: specifica un valore o una lista di valori (numerici o stringa) utilizzati come mancata risposta; verranno trasformati in blank
  • :noconv => []: permette di specificare i nomi delle variabili stringa che anche se contengono valori che appaiono come numeri non devono essere convertiti in variabili numeriche
  • :labels => "name": il nome del foglio che contiene la descrizione delle variabili (codebook) che verranno utilizzate per etichettare le variabili del foglio dei dati. E’ alternativo a :labeldata
  • :labeldata => "sheetname|number|[filename, sheetname|number)": il nome o il numero del foglio che contiene la matrice di dati espressa come etichette. E’ possibile passare un array con il nome del file e il nome o il numero del foglio (default il primo foglio). Le etichette verranno utilizzate per etichettare le variabili del foglio dei dati. Deve esserci un’esatta corrispondenza tra i due fogli. E’ alternativo a :labels
  • :lheader => :name|:label: se specificato :labeldata, :label indica che la prima riga contiene le etichette della variabile e non i nomi. In questo caso la posizione delle variabili nel foglio con i dati e nel foglio con le etichette deve essere identica
  • :hnames => namelist: i nomi delle variabili
  • :row_header => #|:search: il numero di riga in cui si trovano le intestazioni dei campi e da cui iniziare la lettura della matrice di dati. Se viene indicato :search, ptabs2 cercherà di individuare la riga da solo
  • :skip => rowlist: i numeri delle righe che devono essere ignorate
  • :sheets => list: i nomi o i numeri dei fogli da leggere; i dati verranno accodati un foglio dopo l’altro; la variabile _sheet_name_ conterrà il nome del foglio
  • :wss => text: quando specificato :sheets, indica la radice dei worksheets in cui caricare i dati dei fogli invece di accodarli
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
 xlsx.open "nome_file", :sheet => "nome_foglio_dati", :labels => "nome_foglio_etichette"

 xlsx.open 'nome_file2', :sheets => ["2017", "2018", "2019"], :row_header => :search do
   rename /_\d{4}/ => ''
   rename "_sheet_name_" => "year"
   delete "total__"
   select "FILLED(label)"
 end

 spss.open "nome file.xlsx"   # spazio nel nome

get

xlsx.get ha i seguenti argomenti aggiuntivi:

  • :header: legge i nomi delle variabili nella prima riga: true|false, default: true
  • :empty: comportament nel caso di righe vuote: :skip|:keep|:stop, default: :stop
  • :as_num: converte in valori numerici quello che appare come un numero: true|false, default: true
1
varlist = xlsx.get("nome_file", :sheet => "nome_foglio", :empty => :skip).column("varname").uniq

get_sheets

xlsx.get_sheets, a differenza di xlsx.get, legge tutti i fogli del file e restituisce un hash con, per ogni foglio, nome/contenuto.

edit

xlsx.edit permette di aprire e modificare il contenuto di un file xlsx: vedi Aggiornamento file Xlsx

copy

xlsx.copy permette di copiare uno o più fogli da un file xlsx all’altro.

Se non viene specificato nessun nome di file come argomento di .save, il foglio verrà aggiunto al file specificato come argomento del metodo .to()

1
2
3
xlsx.copy(filename [, sheetnumbers|sheetnames]).to(filename [, :pos => number|:first|:last).save([filename])

xlsx.copy("Legenda", "Foglio1").to("Trimestre_AprGiu", :pos => 2).save("Trimestre_AprGiu_new")

Per copiare fogli in un output generato da pTabs2, utilizzare xlsx.copy.

1
2
3
render :xlsx, :file => "Report2", :index => "IndexReport2"

xlsx.copy("Report2", [1, 2]).to("Report1", :pos => :last).save

add

xlsx.add salva i dati in un nuovo foglio di un un file xlsx esistente.

join

xlsx.join unisce in un unico file i fogli di più file xlsx.

Se non viene specificato nessun nome di file come argomento di .save, il foglio verrà aggiunto al primo file indicato nel metodo .join()

1
2
3
xlsx.join(filename1, filename2, filename3, ...).save([filename])

xlsx.join("open_o51", "open_o90", "open_o91").save("open_questions")

Attenzione

I metodi copy, add e join sono disponibili solo se sul computer è installato Microsoft Excel.

matrix

Con xlsx.matrix è possibile creare un file xlsx a partire da una matrice di dati (vettore di vettori).

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
mtx = [
  ["ID", "Giorni"],
  [1, "Lunedì"],
  [2, "Martedì"],
  [3, "Mercoledì"],
  [4, "Giovedì"],
  [5, "Venerdì"],
  [6, "Sabato"],
  [7, "Domenica"],
]
xlsx.matrix "Giorni", mtx, :filter => true, :zoom => 120, :freeze => "B2"

convert

xlsx.convert: vedi Tabella di metadati.

<<

CSV, SSV, TSV

csv gestisce dati in formato delimitato.

Le varianti ssv e tsv, impostano automaticamente i separatori come :s=>';', :d=>',' (ssv) e :s=>'\t', :d=>'.' (tsv).

La prima riga del file deve contenere i nomi delle variabili.

Argomenti aggiuntivi:

  • :id => :varname specifica una variabile su cui ordinare i dati
  • :s => "carattere" specifica il separatore di campo (default: ,)
  • :d => "carattere" specifica il separatore dei decimali (default: .)
  • :auto => false|true determina automaticamente il tipo di file csv (default: false)

csv.open ha i seguenti argomenti aggiuntivi:

  • :na => value|valuelist specifica un valore o una lista di valori (numerici o stringa) utilizzati come mancata risposta; verranno trasformati in blank

csv.save ha i seguenti argomenti aggiuntivi:

  • :na => value specifica un valore (numerico o stringa) da inserire al posto dei valori mancanti (blank).
1
2
3
4
5
6
7
8
 csv.open "nome_file", :s => ';', :d => '.'
 ssv.open "nome_file"
 csv.open "nome_file", :auto => true

 ssv.label "nome_file"
 ssv.open "nome_file", :label => "nome_file_etichette"

 tsv.save "nome_file", :keep => [:sesso, :eta, :area, :ipf, :espcam, :espuni], :na => "NULL"

<<

Nipo ODIN/Diana

odin gestisce i file generati da un questionario Nipo ODIN.

open

odin.open apre un file di dati in formato fisso generato da un questionario Nipo ODIN.

Oltre al file di dati, deve essere presente anche il file contenente la descrizione delle variabili in formato Diana. Le estensioni predefinite sono .dat per i dati e .var per i metadati.

Argomenti aggiuntivi:

  • filename: il nome del file di dati. Viene aggiunta l’estensione .dat a meno che il nome non finisca con u
  • :var => filename: il nome del file VAR. Se non specificato viene usato lo stesso nome del file di dati
  • :encoding => []: permette di specificare l’encoding del file di dati e/o del file VAR.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
 odin.open "survey"
 odin.open "survey", :var => "survey01"
 odin.open 'survey', :encoding => 'utf-8'                  # encoding del file di dati
 odin.open 'survey', :encoding => ['utf-8', 'iso-8859-15'] # encoding di entrambi i file
 odin.open 'survey', :encoding => [nil, 'iso-8859-15']     # encoding del file .var

 odin.open "survey01"                                      # estensioni dat e var (default) senza spazi nei nomi e nome dat e var uguale
 odin.open "survey01", :var => "survey02"                  # estensioni dat e var (default) senza spazi nei nomi e nomi dat e var diversi
 odin.open "survey01", :var => "survey01"                  # estensioni dat e var (default) senza spazi nei nomi
 odin.open "survey01.asc", :var => "survey01"              # estensioni asc (non standard) e var senza spazi nei nomi
 odin.open "survey 01.dat", :var => "survey 01.var"        # estensioni dat e var (default), ma con spazi nei nomi

verbatim

odin.verbatim legge il file delle risposte aperte (o) e genera un file xlsx per la codifica.

Oltre al file di dati, deve essere presente anche il file contenente la descrizione delle variabili in formato Diana.

Se al momento dell’esecuzione del comando è attivo un file di dati (il file di dati delle risposte chiuse), è possibile inserire nel file xlsx delle variabili.

Oltre al foglio o ai fogli delle verbalizzazioni, vengono generati i fogli:

  • Labels con le etichette delle variabili a cui possono essere aggiunti i nuovi codici creati dalla codifica
  • Info con le informazioni necessarie alla procedura coding per unire la codifica al file di dati. Le informazioni generate vanno integrate dall’utente, inserendo, per esempio, i codici esclusivi delle multiple o i nomi delle nuove variabili che verrnno creata con la codifica.

Argomenti aggiuntivi:

  • filename: il nome del file delle aperte. Viene aggiunta l’estensione .o a meno che il nome non finisca con o
  • :var => filename: il nome del file VAR. Se non specificato viene usato lo stesso nome del file delle aperte
  • :xlsx => filename: il nome del file xlsx di output
  • :id => :varname: il nome da attribuire alla variabile dell’identificativo dei record (default: IntNr)
  • :ncodes => #: il numero di colonne per la codifica (default: 5)
  • :keep => [varlist]: le variabili del file attivo che si vogliono riportare nel file xlsx
  • :by => :varname: il nome della variabile che identifica i record del file attivo (default: lo stesso del parametro :id)
  • :labels => true|false: se true inserisce le label (se presenti) delle variabili e non i codici (default: true)
  • :split => true|false: se true genera un foglio per ciascuna domanda (default: false)
  • :alt => true|false: se true colora in modo alternato le righe delle verbalizzazioni (default: false)
1
odin.verbatim "verbo", :var => "verb.var", :xlsx => "verbatims2", :keep => [:sex, :user], :by => :intnr

paradata

odin.paradata legge i file di paradata (.csv) di Nipo Nfield.

Argomenti aggiuntivi:

  • filename: il nome del file di paradata
  • :keep => [varlist]: l’elenco di variabili da includere
  • :noconv => [varlist]: l’elenco delle variabili che non devono essere convertite in numeriche
1
odin.paradata "nomefile", :noconv => [:id]

<<

Triple-S

sss gestisce dati in formato Triple-S.

Oltre al file di dati, deve essere presente anche il file contenente i metadati Triple-S. Le estensioni predefinite sono .asc per i dati e .xml per i metadati.

Argomenti aggiuntivi:

  • :xml => filename: nome del file dei metadati Triple-S. Se non specificato viene usato lo stesso nome del file di dati
  • :encoding => [data_encoding, meta_encoding]: specifica l’encoding del file di dati e del file dei metadati. Utilizzare nil al posto di un encoding per specificare solo l’altro encoding.

sss.save ha i seguenti argomenti aggiuntivi:

  • :find_md => true|false: cerca i gruppi di risposte multiple in base al nome delle variabili e ai valori contenuti
  • :format => :var|:data: :var (default) scrive i dati in base al formato della variabile; :data scrive i dati in base al formato riscontrato nel file
1
2
3
4
5
6
 sss.open "survey"
 sss.open "survey2.dat", :xml => "survey.xml", :encoding => [nil, 'UTF-8']

 sss_xml_version 1.2

 sss.save "survey", :find_md => true

Il parametro di configurazione sss_xml_version specifica la versione di scrittura dei file Triple-S. Valori consentiti: 1.1, 1.2, 2.0 e 3.0.

Encoding

  • File XML:
    • Versione 3.0: UTF-8 (default) oppure Windows-1252. Altri encoding vengono sconsigliati.
    • Versioni precedenti: UTF-8 (default) oppure ISO-8859-1.
  • File di dati:
    • Versione 3.0: Windows-1252 (default) oppure UTF-8.
    • Versioni precedenti: solo ISO-8859-1.

<<

pulsar / galileo

MODULO AGGIUNTIVO

pulsar gestisce dati in formato InSPIRE/Pulsar/Galileo.

Attualmente è disponibile solo il metodo save.

Genera un file di dati (dat), un file var e un file css.

Argomenti aggiuntivi:

  • :find_md => true|false: cerca i gruppi di risposte multiple in base al nome delle variabili e ai valori contenuti
  • :classes => name|[name, title]: la classe di default. Indicare il nome se la classe è già presente, oppure un vettore con il nome e il titolo (default: XX)
  • :skip => classlist|:noclass: l’elenco delle classi che non devono essere esportate oppure :noclass per indicare le tabelle/variabili senza classe
  • :id_key => id: l’id della licenza (default: nil)
  • :universo => number: il numero di casi dell’universo (default: il numero di record)
  • :format => :var|:data: :var scrive i dati in base al formato della variabile; :data (default) scrive i dati in base al formato riscontrato nel file
  • :weights => varlist: le variabili di ponderazione (un’eventuale variabile di ponderazione attiva, viene inclusa automaticamente)
1
 pulsar.save "pulsar_data", :universe => 2000

<<

Testo

fwf gestisce dati in file ASCII in formato fisso (Fixed Width Format).

open

fwf.open legge i dati da una file in formato fisso.

Argomenti aggiuntivi:

  • :encoding => "UTF-8|ISO-8859-1": encoding file di dati

  • :datalist|:data => []: l’elenco delle variabili e delle posizioni come unica stringa o come vettore di stringhe. [1] Per ciascuna variabile o gruppo di variabili specificare:

    • name|list|s() il nome, l’elenco dei nomi separato da virgola o un elenco generato dalla funzione s() (attenzione, la definizione non deve contenere spazi)
    • # la posizione, se la lunghezza del campo è uguale a 1, oppure #-## la posizione di inizio e la posizione di fine
    • :type il tipo di dato (opzionale, default :integer)
    • # il numero di decimali (opzionale, solo per tipo :dec)

Tipi di dato:

  • :string|:a|:alpha|:text: variabile stringa (risultato: :string)
  • :integer|:int|:i: variabile di numeri interi (risultato: :integer)
  • :single|:sng: variabile singola, interi con etichette dei livelli (risultato: :single)
  • :float|:f|:double: variabile di numeri decimali. Il separatore di decimale può essere la virgola o il punto (risultato: :float)
  • :dec: variabile con decimali impliciti; è necessario specificare anche il numero di decimali (risultato: :float)
  • :md: set di variabili multidicotomy: indicare l’elenco delle variabili o la radice del nome e le posizioni complessive (risultato: set di :md)

Gli allineamenti non sono rilevanti, ma non devono essere inseriti spazi all’interno di ciascun elemento.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
fwf.open "nome_file", :data => %w(
  ser_no          1-4
  area            5
  sesso           6
  eta             9-10
  titolo          11
  prof            12-13
  d1,d2,d5        15-20
  d7              28-37 :md
  s(:d8_,1..8,99) 121-129 :md
  price           39-43 :dec 2
  nome            50-59 :a
  cognome         60-69 :a
  indirizzo       70-99 :a
  peso            100-115 :float
)

fwf.open "nome_file", :data => "ser_no 1-4 area 5 d1 15 d5 17 cognome 60-69 :a"

Lettura di un file di dati colonna per colonna:

1
2
num_of_columns = 100
fwf.open "nome_file_dati.dat", :data => num_of_columns.times.map{|x| "c#{(x+1).to_s.rjust(num_of_columns.to_s.size,'0')} #{x+1}"}.join(" ")

save

fwf.save salva i dati in un file in formato fisso.

Argomenti aggiuntivi:

  • :sep => 'string': stringa separazione dati (default: nil)
  • :zero => true|false|[varlist]: numeri con zeri a sinistra (default: false)
  • :reclen => n: genera record di lunghezza n (default: nil)
  • :fill => 'chr': carattere di riempimento dei record (default: ‘ ‘ (spazio))
  • :strip => :ltrim|:rtrim|:trim|:squish: elimina gli spazi dai record: :ltrim a sinistra; :rtrim a destra; :trim sia a destra che a sinistra; :squish elimina anche spazi doppi nella stringa (default: false)
  • :fdate => 'format': formato date (default: %d-%m-%Y)
  • :fdatetime => 'format': formato datetime (default: %d-%m-%Y %H:%M:%S)
  • :nmiss => value: valore per sostituire i valori mancanti nelle variabili numerichen (default: nil)
  • :smiss => value: valore per sostituire i valori mancanti nelle variabili stringa (default: nil)
  • :dmiss => value: valore per sostituire i valori mancanti nelle variabili date (default: nil)
  • :tmiss => value: valore per sostituire i valori mancanti nelle variabili datetime (default: nil)
  • :encoding => "value": encoding file di dati (default: ISO-8859-1)
  • :spss_encoding => "value": encoding script SPSS (default: UTF-8)
  • :quantum_encoding => "value": encoding script Quantum (default: ISO-8859-1)
  • :out => [list]: ulteriori file da produrre: :map mappa in formato xlsx; :sps script SPSS con data list; :quantum script assi Quantum (default: [:map])
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
fwf.save "test20fix", :keep => [:ser_no, :area, :sesso, :etaq, :eta, :d1, :d2, :d5, :peso, :giorno, :ora, :name],
  :sep => ' ',
  :zero => [:ser_no, :peso],
  :reclen => 100,
  :fill => '-',
  :fdate => '%Y%m%d',
  :fdatetime => "%Y%m%d%H%M%S",
  :nmiss => 9,
  :smiss => "...",
  :dmiss => Date.parse("1999-12-31"),
  :tmiss => Time.parse("1999-12-31 23:59:59")

  pr "test20fix.dat", 5, nil, true
+ scrittura del file di dati: D:/pTabs/pTabs2/__test/test20fix.dat
+----+--------+-------+-----+------+------+----------+
| #  |  name  | start | end | size | ndec |   type   |
+----+--------+-------+-----+------+------+----------+
|  1 | ser_no |     1 |   4 |    4 |    0 | integer  |
|  2 | area   |     6 |   6 |    1 |    0 | numeric  |
|  3 | sesso  |     8 |   8 |    1 |    0 | numeric  |
|  4 | etaq   |    10 |  11 |    2 |    0 | integer  |
|  5 | eta    |    13 |  14 |    2 |    0 | numeric  |
|  6 | d1     |    16 |  16 |    1 |    0 | numeric  |
|  7 | d2     |    18 |  18 |    1 |    0 | numeric  |
|  8 | d5     |    20 |  20 |    1 |    0 | numeric  |
|  9 | peso   |    22 |  29 |    8 |    3 | real     |
| 10 | giorno |    31 |  38 |    8 |    0 | date     |
| 11 | ora    |    40 |  53 |   14 |    0 | datetime |
| 12 | name   |    55 |  94 |   40 |    0 | string   |
+----+--------+-------+-----+------+------+----------+

+ sono stati scritti 20 record e 12 variabili
             0         0         0         0         0         0         0         0         0         1
             1         2         3         4         5         6         7         8         9         0
    1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
01: 0002 1 2 15  1 4 3 9 0001.262 20181009 20181009065023 JNXFDWSOEJH JPVQCF                      ------
02: 0009 1 2 24  2 3 1 9 0001.597 20181004 20181004162408 GOMSFQWZPFBI VJBKNUQ                    ------
03: 0010 1 1 27  3 4 1 9 0001.969 20181014 20181014203140 DQLLOWOO QZCQXWG                        ------
04: 0029 1 1 19  2 4 1 9 0001.719 20181005 20181005101115 OBWNXVLUQP HMQBYXMAD                    ------
05: 0032 1 2 25  3 4 3 2 0001.368 20181012 20181012074013 UDIZAOO PSLUTAZJ                        ------

Attenzione

La dimensione della variabile (size) deve contenere interamente il dato, quindi, nel caso di variabili con valori decimali (float), size deve comprendere la parte intera, quella decimale e il punto.

<<

Origine dati ODBC

odbc gestisce origini dati ODBC.

Argomenti aggiuntivi:

  • dsnname o :db => dsnname: il Database Source Name (DSN) registrato sul computer
  • :uid => login: il nome dell’account per l’accesso al database
  • :pwd => password: la password per l’accesso al database

open

odbc.open legge i dati da una tabella o da una query.

Argomenti aggiuntivi:

  • :table => table_name: il nome della tabella (se non usato sql)
  • :sql => sql_string: la stringa di istruzioni in linguaggio SQL (se non usato table)
1
2
odbc.open "nome_DSN", :uid => "login", :pwd => "password", :table => "nome_tabella"
odbc.open "nome_DSN", :uid => "login", :pwd => "password", :sql => "SELECT * FROM nome_tabella"

save

odbc.save crea una nuova tabella e inserisce i dati.

Argomenti aggiuntivi:

  • :table => table_name: il nome della tabella
  • :erase => true|false: elimina la tabella prima dell’inserimento dei dati (default: false)
  • :create => true|false: crea la tabella prima dell’inserimento dei dati (default: true)
  • :insert => true|false: inserisce i dati (default: true)
  • :chunks => number: specifica quanti record vengono inseriti alla volta (default: 1000)
1
odbc.save "nome_DNS", :uid => "login", :pwd => "password", :table => "table1", :keep => [:ser_no, :sex, :eta, :mcr, :peso, :day, :v1])

exec

odbc.exec esegue una query. restituisce un hasch con i risultati.

Argomenti aggiuntivi:

  • :sql => sql_string: la stringa di istruzioni in linguaggio SQL da eseguire
1
odbc.exec "nome_DNS", :uid => "login", :pwd => "password", :sql => "DROP TABLE table1")

clear

odbc.clear elimina tutti i record di -una tabella.

Argomenti aggiuntivi:

  • :table => table_name: il nome della tabella

drop

odbc.drop elimina una tabella.

Argomenti aggiuntivi:

  • :table => table_name: il nome della tabella

config

Se si usano più istruzioni sulla stessa origine ODBC, può essere utile impostare i parametri di accesso con il metodo odbc.config.

1
2
3
4
5
6
7
odbc.config :uid => "user", :pwd => "password"
odbc.open "dbname", :table => "table1"
odbc.save "dbname", :table => "table2"

odbc.config :db => "dbname", :uid => "user", :pwd => "password"
odbc.open :table => "table1"
odbc.save :table => "table2"

<<

SQLite

sqlite gestisce i database in formato SQLite.

Utilizza la stessa sintassi di odbc. :uid e :pwd non sono supportati.

<<

Access (ACCDB)

accdb gestisce file Access nel formato ACCDB.

Utilizza la stessa sintassi di odbc. :uid e :pwd non sono supportati.

create

accdb.create genera un nuovo database.

Argomenti:

  • :db => database_name: il nome del database

<<

ds?

ds? stampa nell’output la struttura del dataset. Vedi: Esplorazione dei dati

Note

[1]%w(...) crea un vettore di stringhe senza la necessità di usare le virgolette e separare gli elementi con la virgola. Il separatore della stringa è lo spazio. Attenzione a non inserire ulteriori spazi all’interno dei diversi elementi.