aFill
Preenche array (todo ou faixa) com um valor fixo. Util pra inicializar arrays e reset de buffers.
Assinatura: aFill(aArr, xValor, [nIni], [nQtd]) -> aArr
Retorna: Array
aFill preenche elementos do array com um valor fixo — todos os elementos por default, ou faixa especifica.
Sintaxe
aFill(aArr, xValor, nIni, nQtd) --> aArr
// xValor = valor a preencher
// nIni = posicao inicial (default 1)
// nQtd = quantos elementos (default ate o fim)
Exemplos
aArr := Array(5) // {NIL, NIL, NIL, NIL, NIL}
aFill(aArr, 0) // {0, 0, 0, 0, 0}
aFill(aArr, "X") // {"X", "X", "X", "X", "X"}
// Faixa especifica
aArr := {1, 2, 3, 4, 5}
aFill(aArr, 0, 2, 3) // {1, 0, 0, 0, 5}
Casos praticos
1. Reset de buffer entre iteracoes
Local aBuf := Array(10)
For i := 1 To Len(aRegistros)
aFill(aBuf, NIL) // limpa antes de cada uso
aBuf[1] := aRegistros[i][1]
aBuf[2] := aRegistros[i][2]
// ...
Next
2. Inicializar array zerado
// Array de totais mensais
Local aTotalMes := Array(12)
aFill(aTotalMes, 0)
// Soma valores por mes
For i := 1 To Len(aTitulos)
nMes := Month(aTitulos[i][1])
aTotalMes[nMes] += aTitulos[i][2]
Next
3. Limpar parte do array (preservar resto)
aDados := {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
aFill(aDados, 0, 4, 3)
// {1, 2, 3, 0, 0, 0, 7, 8, 9, 10}
Pegadinhas
- Por referencia para arrays/objetos — se xValor for array, todos elementos apontam pra mesma instancia. Cuidado!
- Modifica array original — nao retorna copia.
- nIni + nQtd nao pode exceder Len(aArr) — verifique antes em loops.
Pegadinha critica — referencia compartilhada
// ERRADO — todos elementos apontam pro MESMO sub-array
aLinhas := Array(5)
aFill(aLinhas, {0, 0, 0})
aLinhas[1][1] := 99 // ALTERA TODOS!
// aLinhas[2][1] tambem vira 99
// CERTO — loop com novo array em cada
For i := 1 To 5
aLinhas[i] := {0, 0, 0} // cada iteracao = nova instancia
Next