17 agosto 2007

Convertir una variable String a otro tipo

Delphi posee un amplio repertorio de funciones para convertir una cadena de texto a otro tipo de variable. Veamos de que funciones disponemos:

function StringToWideChar( const Source: string; Dest: PWideChar; DestSize: Integer ): PWideChar;

Esta función devuelve la cadena Source en formato de caractéres unicode. Por ejemplo:

var
sTexto: String;
PWS: PWideChar;
begin
sTexto := 'Convirtiendo texto a caracteres Unicode (16 bits)';
New( PWS );
StringToWideChar( sTexto, PWS, Length( sTexto ) + 1 );
ShowMessage( PWS );
Dispose( PWS );
end;

function StrToCurr( const S: string ): Currency; overload;

Convierte una cadena de texto S a un valor Currency. Por ejemplo:

StrToCurr( '1234,5678' ) devuelve 1234,5678
StrToCurr( '1234,,5678' ) provoca el error: '1234,,5678' is not a valid floating point value

function StrToCurrDef( const S: string; const Default: Currency ): Currency; overload;

Esta función es igual que StrToCurr aceptando además como segundo parámetro el valor que deseamos que tenga por defecto en el caso de que falle la conversión. Por ejemplo:

StrToCurrDef( '1234,5678', 0 ) devuelve 1234,5678
StrToCurrDef( '1234,,5678', 0 ) devuelve 0 y no provoca ningún error

function StrToDate( const S: string ): TDateTime; overload;

Convierte la cadena de texto S a un valor de fecha. Por ejemplo:

StrToDate( '17/06/2007' ) devuelve 17/06/2007
StrToDate( '17-06-2007' ) provoca el error: '17-06-2007' is not valid date

function StrToDateDef( const S: string; const Default: TDateTime ): TDateTime; overload;

Esta función es igual que StrToDate aceptando además como segundo parámetro el valor que deseamos que tenga por defecto en el caso de que falle la conversión. Por ejemplo:

StrToDateDef( '17/06/2007', StrToDate( '1/1/2007' ) ) devuelve 17/06/2007
StrToDateDef( '17-06-2007', StrToDate( '1/1/2007' ) ) devuelve 01/01/2007 y no provoca ningún error
StrToDateDef( '17/15/2007', StrToDate( '1/1/2007' ) ) devuelve 01/01/2007 y no provoca ningún error

function StrToDateTime( const S: string ): TDateTime; overload;

Convierte la cadena de texto S a un valor de fecha y hora. Por ejemplo:

StrToDateTime( '17/06/2007 12:25' ) devuelve 17/06/2007 12:25:00
StrToDateTime( '17-06-2007 12:25' ) provoca el error: '17-06-2007 12:25' is not a valid date an time

function StrToDateTimeDef( const S: string; const Default: TDateTime ): TDateTime; overload;

Esta función es igual que StrToDateTime aceptando además como segundo parámetro el valor que deseamos que tenga por defecto en el caso de que falle la conversión. Por ejemplo:

StrToDateTimeDef( '17/06/2007 12:25', StrToDateTime( '1/1/2007 0:0:0' ) ) devuelve 17/06/2007 12:25:00
StrToDateTimeDef( '17-06-2007 12:25', StrToDateTime( '1/1/2007 0:0:0' ) ) devuelve 01/01/2007 12:00:00 sin errores
StrToDateTimeDef( '17/15/2007 12:25', StrToDateTime( '1/1/2007 0:0:0' ) ) devuelve 01/01/2007 12:00:00 sin errores

function StrToFloat( const S: string ): Extended; overload;

Convierte la cadena de texto S a un valor Extended. Por ejemplo:

StrToFloat( '1234,56789' ) devuelve 1234,56789
StrToFloat( '1234,,56789' ) provoca el error: '1234,,56789' is not valid floating point value

function StrToFloatDef( const S: string; const Default: Extended ): Extended; overload;

Esta función es igual que StrToFloat aceptando además como segundo parámetro el valor que deseamos que tenga por defecto en el caso de que falle la conversión. Por ejemplo:

StrToFloatDef( '1234,56789', 0 ) devuelve 1234,56789
StrToFloatDef( '1234,,56789', 0 ) devuelve 0 y no provoca ningún error

function StrToInt( const S: string ): Integer;

Convierte la cadena de texto S a un valor Integer (permite caracteres hexadecimales). Por ejemplo:

StrToInt( '1234' ) devuelve 1234
StrToInt( '$FFFF' ) devuelve 65535
StrToInt( 'FFFF' ) provoca el error: 'FFFF' is not a valid integer value

function StrToIntDef( const S: string; const Default: Integer ): Integer;

Esta función es igual que StrToInt aceptando además como segundo parámetro el valor que deseamos que tenga por defecto en el caso de que falle la conversión. Por ejemplo:

StrToIntDef( '1234', 0 ) devuelve 1234
StrToIntDef( '$FFFF', 0 ) devuelve 65535
StrToIntDef( 'FFFF', 0 ) devuelve 0 y no provoca ningún error
StrToIntDef( '', 0 ) devuelve 0 y no provoca ningún error

function StrToInt64( const S: string ): Int64;

Convierte la cadena de texto S a un valor Int64 (permite caracteres hexadecimales). Por ejemplo:

StrToInt64( '12345678' ) devuelve 12345678
StrToInt64( '$FFFFFFFF' ) devuelve 4294967295

function StrToInt64Def( const S: string; Default: Int64 ): Int64;

Esta función es similar a StrToInt64 aceptando además como segundo parámetro el valor que deseamos que tenga por defecto en el caso de que falle la conversión. Por ejemplo:

StrToInt64Def( '12345678', 0 ) devuelve 12345678
StrToInt64Def( '$FFFFFFFF', 0 ) devuelve 4294967295
StrToInt64Def( 'FFFFFFFF', 0 ) devuelve 0 y no provoca níngun error
StrToInt64Def( '', 0 ) devuelve 0 y no provoca níngun error

function StrToTime( const S: string ): TDateTime; overload;

Convierte la cadena de texto S a un valor TTime o TDateTime. Por ejemplo:

StrToTime( '12:32:54' ) devuelve 12:32:54
StrToTime( '12:32' ) devuelve 12:32:00
StrToTime( '12:32:67' ) provoca el error: '12:32:67' is not a valid time

function StrToTimeDef( const S: string; const Default: TDateTime ): TDateTime; overload;

Esta función es igual a StrToTime aceptando además como segundo parámetro el valor que deseamos que tenga por defecto en el caso de que falle la conversión. Por ejemplo:

StrToTimeDef( '12:32:54', StrToTime( '00:00:00' ) ) devuelve 12:32:54
StrToTimeDef( '12:32', StrToTime( '00:00:00' ) ) devuelve 12:32:00
StrToTimeDef( '12:32:67', TimeToStr( '00:00:00' ) ) devuelve 0:00:00 y no provoca ningún error

function StrToBool( const S: string ): Boolean;

Convierte la cadena de texto S a un valor Boolean. Por ejemplo:

StrToBool( 'True' ) devuelve True
StrToBool( 'False' ) devuelve False
StrToBool( 'Fals' ) provoca el error: 'Fals' is not valid boolean value

function StrToBoolDef( const S: string; const Default: Boolean ): Boolean;

Esta función es igual a StrToBool aceptando además como segundo parámetro el valor que deseamos que tenga por defecto en el caso de que falle la conversión. Por ejemplo:

StrToBoolDef( 'True', False ) devuelve True
StrToBoolDef( 'False', False ) devuelve False
StrToBoolDef( 'Tru', False ) devuelve False y no provoca ningún error
StrToBoolDef( 'Fals', False ) devuelve False y no provoca ningún error

procedure Val( S; var V; var Code: Integer );

Este procedimiento convierte la cadena de texto S a un valor numérico. Si la conversión falla nos devuelve en la variable Code la posición en la cadena de texto S donde está el error. Por ejemplo:

var
s: String;
e: Extended;
begin
s := '1234.5678';
Val( s, e, iCodigo );

if iCodigo = 0 then
ShowMessage( 'Conversión correcta: ' + FloatToStr( e ) )
else
ShowMessage( 'Error en la posición: ' + IntToStr( iCodigo ) )
end;

Al ejecutar este bloque de código devolverá:

Conversion correcta: 1234,5678

Pero si sustituimos la primera línea por:

s := '1234,5678';

Entonces mostrará el mensaje:

Error en la posición 5.

Aquí hay que tener mucho cuidado, porque al contrario que la función FloatToStr si ponemos la notación decimal igual que la tenemos en Windows provocará un error. En este caso la notación correcta es el punto y no la coma (se podría solucionar cambiando la variable DecimalSeparator).

Pruebas realizadas en Delphi 7.

Publicidad