Strings. Essa é pra quem manja mesmo.
09/03/2003
0
Boa Noite.
Utilizo a linguagem ADVPL e nela tem uma função chamada soma1(String) que faz o seguinte:
string := ´01´ ;
string := soma1(string);
string passa a ser ´02´
Outro exemplo:
string := ´99´ ;
string := soma1(string);
string passa a ser ´A0´
Depois ´A1´ e ai vai.
Outro exemplo:
string := ´ZZ´ ;
string := soma1(string);
string passa a ser ´100´
Se alguém souber de uma função semelhante ou tem algum código que faça isso.
Atento que a função trata strings de qualquer tamanho.
O AdilsonD escreveu o fonte:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
function Soma1(Value: String): String;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
function TForm1.Soma1(Value: String): String;
var
fValue1,
fValue2: Byte;
begin
fValue1 := Ord(Value[1]);
fValue2 := Succ(Ord(Value[2]));
if not (fValue2 in [Ord(´0´)..Ord(´9´)]) then
begin
if fValue1 = Ord(´9´) then
fValue1 := Ord(´A´)
else
begin
Inc(fValue1);
if fValue1 > Ord(´Z´) then
fValue1 := Ord(´0´);
end;
fValue2 := Ord(´0´);
end;
Result := Chr(fValue1) + Chr(fValue2);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit2.Text := Soma1(Edit1.Text);
end;
end.
Muito boa a função funciona para 2 caracteres.
Li o fonte e não consegui. Preciso que ao chegar a ´ZZ´ ele não pule pra ´00´ e sim ´100´.
Quando chegar em ´1ZZ´, ´200´.
´ZZZ´, ´1000´. E ai vai.
Por favor me ajude.
Valew.
Utilizo a linguagem ADVPL e nela tem uma função chamada soma1(String) que faz o seguinte:
string := ´01´ ;
string := soma1(string);
string passa a ser ´02´
Outro exemplo:
string := ´99´ ;
string := soma1(string);
string passa a ser ´A0´
Depois ´A1´ e ai vai.
Outro exemplo:
string := ´ZZ´ ;
string := soma1(string);
string passa a ser ´100´
Se alguém souber de uma função semelhante ou tem algum código que faça isso.
Atento que a função trata strings de qualquer tamanho.
O AdilsonD escreveu o fonte:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
function Soma1(Value: String): String;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
function TForm1.Soma1(Value: String): String;
var
fValue1,
fValue2: Byte;
begin
fValue1 := Ord(Value[1]);
fValue2 := Succ(Ord(Value[2]));
if not (fValue2 in [Ord(´0´)..Ord(´9´)]) then
begin
if fValue1 = Ord(´9´) then
fValue1 := Ord(´A´)
else
begin
Inc(fValue1);
if fValue1 > Ord(´Z´) then
fValue1 := Ord(´0´);
end;
fValue2 := Ord(´0´);
end;
Result := Chr(fValue1) + Chr(fValue2);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit2.Text := Soma1(Edit1.Text);
end;
end.
Muito boa a função funciona para 2 caracteres.
Li o fonte e não consegui. Preciso que ao chegar a ´ZZ´ ele não pule pra ´00´ e sim ´100´.
Quando chegar em ´1ZZ´, ´200´.
´ZZZ´, ´1000´. E ai vai.
Por favor me ajude.
Valew.
Doug_chagas
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)