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

Post popolari in questo blog

Nuovo Compilatore Z80...

Sinclair QL

Amstrad CPC 472