Skip to content

Utilizzare IDE Script per automatizzare le operazioni sul codice

Una funzionalità molto utile di Xojo è l’IDE Script. A volte è necessario effettuare delle operazioni sul proprio codice che sono decisamente noiose. La funzionalità dell’IDE Script di Xojo può renderle a volte semplici.

L’IDEScript permette di scrivere del codice per operare sull’IDE.

Si possono fare diverse operazioni in questo caso vediamo come poter effettuare semplicemente la classica assegnazione inversa.

Poniamo di avere in un metodo una sezione che legge i valori da un dictionary impostando dei valori in variabili (di una classe, di modulo, non è rilevante). Vogliamo scrivere la funzione inversa, vale a dire impostare un valore del dictionary al relativo valore della variabile. Qualcosa del tipo:

//Lettura
MyLabelA.Text = myDictionary.value("A")
 
//Scrittura
myDictionary.value("A") = MyLabelA.Text

Se abbiamo solo una riga ovviamente è banale, ma se ne abbiamo tante la cosa è decisamente noiosa.
Possiamo allora scrivere uno Script per l’IDE di Xojo che faccia il lavoro al posto nostro.
Dal menu File selezioniamo IDE Scripts e qui New IDE Script. Si apre una finestra in cui possiamo inserire il nostro codice. La funzione è abbastanza semplice:

function swapSelection(txt as String,swapOnChars as String) as String
//Dividiamo il testo in righe
    dim v() as String=txt.split(endofline)
    dim r() as String
    for Each vv as String in v
//Per ogni riga la dividiamo rispetto al gruppo di caratteri su cui la vogliamo invertire
        dim rr() as String=vv.split(swapOnChars)
        if rr.ubound>0 then
//Se ci sono più elementi nel vettore dobbiamo invertire i primi due e poi riunire tutto il vettore
            dim temp as String=rr(0)
            rr(0)=rr(1)
            rr(1)=temp
            r.append join(rr,swapOnChars)
        else
//Altrimenti non dobbiamo operare sulla riga
            r.append vv
        end if
    next
//Restituiamo il testo in ingresso con le righe invertite
    return join(r,endofline)
end function
 
text= swapSelection(text," = ")

Ora prendiamo il nostro metodo, copiamo dal metodo di “Lettura” le assegnazioni e incolliamo nel metodo di “Scrittura” in modo da avere ad esempio:

//Assegno al dictionary i valori dall'interfaccia
MyLabelA.Text = myDictionary.value("A")
MyLabelB.Text = myDictionary.value("B")
MyLabelC.Text = myDictionary.value("C")
MyLabelD.Text = myDictionary.value("D")
MyLabelE.Text = myDictionary.value("E")
MyLabelF.Text = myDictionary.value("F")
MyLabelG.Text = myDictionary.value("G")
MyLabelH.Text = myDictionary.value("H")
MyLabelI.Text = myDictionary.value("I")
MyLabelJ.Text = myDictionary.value("J")
MyLabelK.Text = myDictionary.value("K")
MyLabelL.Text = myDictionary.value("L")
MyLabelM.Text = myDictionary.value("M")
MyLabelN.Text = myDictionary.value("N")
 
//Proseguo con il codice

Dobbiamo invertire tutte queste assegnazioni. Per cui le selezioniamo, lanciamo lo script (che possiamo salvare e richiamare semplicemente o in test lanciare direttamente dalla finestra di editing) e otteniamo:

//Assegno al dictionary i valori dall'interfaccia
myDictionary.value("A") = MyLabelA.Text
myDictionary.value("B") = MyLabelB.Text
myDictionary.value("C") = MyLabelC.Text
myDictionary.value("D") = MyLabelD.Text
myDictionary.value("E") = MyLabelE.Text
myDictionary.value("F") = MyLabelF.Text
myDictionary.value("G") = MyLabelG.Text
myDictionary.value("H") = MyLabelH.Text
myDictionary.value("I") = MyLabelI.Text
myDictionary.value("J") = MyLabelJ.Text
myDictionary.value("K") = MyLabelK.Text
myDictionary.value("L") = MyLabelL.Text
myDictionary.value("M") = MyLabelM.Text
myDictionary.value("N") = MyLabelN.Text
 
//Proseguo con il codice

Ovviamente bisogna ricordarsi che questa funzione opera su tutto il testo del metodo.