A indicação que eu fiz é justamente para que os dados sejam do tamanho FIXO e ainda acho que essa substituição está correta e não tem NADA a ver com o tamanho da variável em que está sendo subtituida. Vou utilizar o mesmo exemplo de resultado-final do Fladimir para eu poder exemplificar:
E o resultado no arquivo ARQGERAD.TXT dado pelo Fladimir é assim:
Código: Selecionar todos
01234
Jose Carlos da Silva 25/04/2008 25/04/2008
R$ 100,00 R$ 100,00
O importante como eu ja disse nas minhas ultimas duas mensagens, é que DEVE ser considerado o tamanho do conteúdo da variável e não a NOMENCLATURA da variável da qual estaria gravada no arquivo
Boleto.TMP (citando exemplo) e desta forma contando quantos espaços tem entre os campos como resultado do arquivo
ARQGERAD.TXT. Então eu contei todos os espaços que o Fladimir postou e eis os espaçamento entre variáveis:
- Na primeira linha do arquivo
Boleto.TMP, o primeiro campo "@codigo" está na terceira posição
- Logo vem a variável-TAG "@código" que possue 7 caracteres, mas que não interessa isso na minha substituição e sim o tamanho-limite que tem para ser escrito no formulario-boleto que neste caso é tamanho 5.
- Na segunda linha vem um espaçamento de 3 caracteres antes da variável-Tag "@nome" o qual parece possuir 50 caracteres onde iria o nome completo.
- Depois vem dois espaços-caracter antes da outra variável-Tag "@data"
- Logo vem o conteúdo dessa data o que ocuparia o tamanho de 10 caracteres (este tamanho é fixo caso utilize-se o CENTURY ON).
- Logo vem um espaçamento de 11 caracteres antes da outra variável-Tag "@data".
- Depois viria o conteúdo dessa data o que ocuparia o tamanho de 10 caracteres.
- Na terceira linha, vem 3 espaços antes da string "R$ "
- A seguir vem a string "R$ " ocupando 3 caracteres e enseguida o conteúdo da variável-TAG "@valor" que ocupa o tamanho de 6 caracteres ( pode utilizar o TRANSFORM(VALOR,"@E 999.99") )
- Logo após vem um espaçamento de 64 caracteres para separar antes da segunda string que define a moeda "R$ ".
- Coloca-se a string "R$ " que ocupa 3 caracteres e enseguida o conteúdo da ultima variável-TAG "@valor" que ocupa tambem o tamanho de 6 caracteres.
Agora se concatenamos cada LINHA para gravar o arquivo
Boleto.TMP (contendo as variáveis), deverá ficar assim:
Código: Selecionar todos
SET ALTERNATE TO Boleto.TMP
SET ALTERNATE ON
? SPACE(3)+"@codigo"
? SPACE(3)+"@nome"+SPACE(2)+"@data"+SPACE(11)+"@data"
? SPACE(3)+"R$ "+"@valor"+SPACE(64)+"R$ "+"@valor"
SET ALTERNATE OFF
SET ALTERNATE TO
Portanto o arquivo Boleto.TMP irá ficar com o seguinte FORMATO:
Agora veja que na minha mensagem anterior estou substituindo a string "@codigo" por STRZERO(1234,5,0), portanto a string "@codigo" deixará de existir sendo substituída por outra string "01234".
Ja na substituição do "@nome" indiquei PADR("Jose Carlos de Lima",40) o tamanho 40 foi um chute, mas se fizermos conforme foi dimensionado acima, teremos que fazer PADR("Jose Carlos de Lima",
50), isso é de menos. E assim por diante. Portanto ainda acredito que o importante é o CORRETO posicionamento das variáveis no arquivo
Boleto.TMP sem necessidade alguma de contar o tamanho da NOMENCLATURA de cada variável-TAG, certo ?