Olá amigos,
confesso que tambem não testei mas, olhando a rotina construida pelo Toledo, creio que vá gerar um run time error "Lock Required", pois o arquivo foi aberto sem se especificar o modo SHARED ou EXCLUSIVE (e não há nenhum SET EXCLUSIVE ON ativo) e não foi feito um RLock() antes de gravar cada registro. É melhor abrir o arquivo com EXCLUSIVE (USE CADASSO EXCLUSIVE NEW).
Creio tambem que os replaces poderiam ser feitos de forma direta:
use CADASSO EXCLUSIVE New
GO TOP
DO WHILE !EOF()
// vNome:=ConvMin(NOME)
// vEndereco:=ConvMin(ENDERECO)
CADASSO->NOME:=ConvMin(NOME)
CADASSO->ENDERECO:=ConvMin(ENDERECO)
SKIP
ENDDO
CLOSE ALL
RETU
Ao longo dos meus quase 20 anos de Clipper, tambem precisei criar uma rotina para capitalizar frases, batizada de InitCap():
//---------------------------------------------------------------------------
Function InitCap( cString )
Local cRet := "", nLen := Len( cString ), nAt, cVar
Local aExcept := { "da", "de", "do", "dos", "das", "a","e","o" }
If Valtype( cString ) == "C"
cString := Lower( AllTrim( cString ) )
While Len( cString ) > 0
If ( nAt := At( " ", cString ) ) > 0
cVar := Substr( cString, 1, nAt )
If ( Ascan( aExcept, Trim( cVar ) ) ) == 0
cRet += Upper( Left( cVar, 1 ) ) + Substr( cVar, 2 )
Else
cRet += cVar
Endif
Else
cRet += Upper( Left( cString, 1 ) ) + Substr( cString, 2 )
EXIT
Endif
cString := Substr( cString, ++nAt )
Enddo
Endif
Return cRet
//------------------------------------------------------------------------------
O Clipper é realmente uma linguagem fantástica! Vejam outra forma de se fazer a rotina acima. Usei InitCap() mas poderia ser a ConvMin() do Toledo:
USE CADASSO EXCLUSIVE NEW
CADASSO->( DbGoTop(), ;
DBEval( { || CADASSO->NOME := InitCap( NOME), ;
CADASSO->ENDERECO := InitCap( ENDERECO ) ;
} ;
),
DBCloseArea() ;
)
__Quit()
Grandes []'s a todos
AlxSts