Fala galera da programação, tudo beleza?
Uma das coisas mais comuns na programação é a conversão de dados, e uma das conversões mais comuns é de Texto para Inteiro (String para Integer).
Em pascal há várias formas de fazer isso e hoje vamos conhecer 5 formas que podem lhe ajudar em seus códigos.
A função StrToInt
converte uma string para um inteiro em Pascal, é a função mais básica de utilizar. Aqui está um exemplo de como usá-la:
{ Criado pelo Professor Giovani Da Cruz } program Conversao; uses SysUtils; var numeroString: string; numeroInteiro: integer; begin numeroString := '123'; numeroInteiro := StrToInt(numeroString); Writeln('Numero Convertido: ', NumeroInteiro); end.
Utilize ela quando você tem certeza que a string a ser convertida contém um número válido.
O StrToIntDef
é uma abordagem muito útil para converter uma string para um inteiro em Pascal, especialmente quando você precisa lidar com casos em que a string pode não representar um número válido. Aqui está como você pode usar o StrToIntDef
:
{ Criado pelo Professor Giovani Da Cruz } program Conversao; uses SysUtils; var numeroString: string; numeroInteiro: integer; begin // Conversão normal numeroString := '123'; numeroInteiro := StrToIntDef(numeroString, 0); WriteLn('NúmeroConvertido: ', numeroInteiro); // Conversão com erro numeroString := 'xxx'; numeroInteiro := StrToIntDef(numeroString, 0); WriteLn('NúmeroConvertido: ', numeroInteiro); end.
O StrToIntDef
converte a string para um inteiro, mas se a string não for um número válido, ele retorna um valor padrão especificado como segundo argumento. Isso é útil para lidar com entradas do usuário ou quando você precisa de um valor padrão se a conversão falhar.
Portanto, você pode usar o StrToIntDef
sempre que precisar converter uma string para um inteiro e desejar fornecer um valor padrão em caso de falha na conversão.
A função Val
em Pascal é usada para converter uma string em um tipo numérico, como integer, real, double etc. O nome Val
é uma abreviação de “value” (valor), o que indica que a função é usada para atribuir um valor à variável.
A assinatura da função Val
é a seguinte:
procedure Val(S: string; var V; var Code: Integer);
S
: É a string que você deseja converter.V
: É a variável para a qual você deseja atribuir o valor convertido.Code
: É uma variável de saída que indica se a conversão foi bem-sucedida ou não. Se a conversão falhar, Code
será diferente de zero, indicando o motivo do erro.A função Val
funciona analisando a string S
e atribuindo seu valor convertido à variável V
. Aqui está um exemplo simples:
{ Criado pelo Professor Giovani Da Cruz } program ExemploErroConversaoVal; var numeroString: string; numeroInteiro: integer; codigoErro: integer; begin numeroString := '123'; // número válido Val(numeroString, numeroInteiro, codigoErro); if codigoErro <> 0 then writeln('Erro de conversão: ', codigoErro) else writeln('Valor inteiro convertido: ', numeroInteiro); //--------------------------------------------- numeroString := 'abc'; // String que não representa um número válido Val(numeroString, numeroInteiro, codigoErro); if codigoErro <> 0 then writeln('Erro de conversão: ', codigoErro) else writeln('Valor inteiro convertido: ', numeroInteiro); end.
Neste exemplo, a string numeroString
contém ‘123’ que é um número válido e ‘abc’, que não é um número válido. Portanto, ao chamar a função Val
para converter esta string em um inteiro, ocorrerá um erro de conversão com o ‘abc’ e codigoErro
será diferente de zero. O programa exibirá a mensagem de erro indicando o motivo do erro.
A função SScanf
em Pascal, disponível na unidade sysutils
, é uma função poderosa que permite fazer análises de strings com base em um formato especificado, muito semelhante à função scanf
em C. Ela analisa a string de entrada de acordo com o formato especificado e atribui os valores extraídos às variáveis correspondentes.
A assinatura da função SScanf
é a seguinte:
function SScanf(const S: string; const Format: string; Args: array of const): Integer;
S
: É a string que você deseja analisar.Format
: É uma string que especifica o formato da string de entrada e como os valores devem ser interpretados.Args
: É uma lista de argumentos onde os valores extraídos serão armazenados.A função retorna o número de valores extraídos com sucesso e atribuídos às variáveis correspondentes.
O parâmetro Format
pode conter especificadores de formato, como %d
para números inteiros, %f
para números de ponto flutuante, %s
para strings, %c
para caracteres, etc. Assim como no scanf
em C, você pode usar espaços em branco na string de formato para indicar espaços em branco na string de entrada.
Aqui está um exemplo simples de uso da função SScanf
para extrair um número inteiro de uma string:
{ Criado pelo Professor Giovani Da Cruz } program ExemploSScanf; uses sysutils; var numeroString: string; numeroInteiro: integer; numValores: integer; begin numeroString := '123'; numValores := SScanf(numeroString, '%d', [@numeroInteiro]); writeln('Número de valores extraídos: ', numValores); writeln('Número inteiro extraído: ', numeroInteiro); end.
Neste exemplo, a função SScanf
analisa a string numeroString
usando o formato %d
, que indica um número inteiro. O valor inteiro extraído é armazenado na variável numeroInteiro
. O número de valores extraídos com sucesso é armazenado em numValores
, que deve ser 1 neste caso. O programa então imprime esses valores na tela.
Este código são class helpers que nas novas versões de Delphi e Lazarus disponibilizam. Aqui tem um exemplo compilado em Lazarus 2.2.6. Disponível na unidade sysutils
.
{ Criado pelo Professor Giovani Da Cruz } program Project1; uses SysUtils; // Necessário estar declarado var S : String; I : Integer; begin S := '250'; I := S.ToInteger; Writeln('O valor de I e: ', I); Readln; end.
Pode ser que dependendo da dos versão de Delphi ou Lazarus está opção não esteja disponível.
Beleza pessoal? Espero que o artigo possa ajudar em seus códigos.
Dúvidas ou sugestões? Deixe o seu comentário!
Um abraço e até o próximo post. Valeu!
#Pascal #Delphi #Lazarus #DesenvolvimentoDeSoftware #GiovaniDaCruz
Está gostando do conteúdo?
Considere pagar um cafezinho para nossa equipe!