Eliminare gli spazi
Sto ampliando e migliorando il mio interprete Basic e oggi mi sono accorto di un problema legato ad una funzione che uso da tanti anni, e mi sono reso conto di essere un pollastro ;-)
La funzione in questione è Trim, siccome in LiveCode non c'era e avevo bisogno di qualcosa minimalista la scrissi così:
function Trim pText
return word 1 to -1 of pText
end Trim
Siccome lo spazio non viene considerato tipo WORD, scrivendo in questa maniera restituisco tutte le WORD dalla prima all'ultima e se ci sono degli spazi all'inizio o alla fine li salta, geniale.
Ma c'è sempre un ma, in Basic per distinguere i tipi di variabili si usa mettere il simbolo $ alla fine del nome della variabile, cosi anche nel mio interprete Basic, se la riga è:
VAR Pollo$ = "Paolo"
PRINT "Ciao ", Pollo$ , " bentornato!"
Nella prima riga tutto bene perché Pollo$ è considerato tipo TOKEN ma se eseguo la funzione Trim nel PRINT, visto che ci sono tre segmenti separati dalla virgola e non voglio trattarli come TOKEN, mi restituisce "Pollo" perché il simbolo $ non appartiene al tipo WORD, in LiveCode il tipo WORD è una parola delimitata da uno o più spazi, tabulazioni, CR, o è racchiusa da doppi apici. Meglio tardi che mai Winking
Così ho riscritto la funzione Trim :-)
function Trim pData
return Ltrim(Rtrim(pData))
end Trim
function Ltrim pData
local v_i
repeat with v_i = 1 to the number of chars in pData
if char v_i of pData <> space then exit repeat
end repeat
return the char v_i to -1 of pData
end Ltrim
function Rtrim pData
local v_i
repeat with v_i = the number of chars in pData down to 1
if char v_i of pData <> space then exit repeat
end repeat
return the char 1 to v_i of pData
end Rtrim
Ovviamente si può scrivere in altri cento modi ;-)
Commenti
Posta un commento