Anónimo
Ver si hay comas en edit y tomar valor de la derecha
La pregunta es comp puedo hacer para ver si en un edit hay una coma y en caso de que si tenga tomar el valor que este en la derecha un ejemplo.
Supongamos que tengo
Si el edit1 tiene [,] entonces
Si tiene coma y la letra siguiente es f
Si no tiene coma
El edit no tiene coma
Fin aplicación
Supongamos que tengo
Si el edit1 tiene [,] entonces
Si tiene coma y la letra siguiente es f
Si no tiene coma
El edit no tiene coma
Fin aplicación
1 Respuesta
Respuesta
1
1
Anónimo
derecha_coma := '';
i := pos(',', edit1.text);
if i > 0 then begin
derecha_coma := copy(edit1.text, i + 1, length(edit1.text);
end;
i := pos(',', edit1.text);
if i > 0 then begin
derecha_coma := copy(edit1.text, i + 1, length(edit1.text);
end;
Gracias por su pronta respuesta.
Me dice que expected but ';' found
Y el código esta como lo mando usted
coma_derecha lo puse en variable como string
i como integer
Muchas gracias.
Me dice que expected but ';' found
Y el código esta como lo mando usted
coma_derecha lo puse en variable como string
i como integer
Muchas gracias.
muchas gracis por su ayuda ya lo pude hacer y y lo realize de esta manera
for I := 1 to Length(edit1.Text) do
if pos(edit1.Text,',')>0 then
edit2.Text:=copy(edit1.Text,i+1,(edit1.Top));
Su código me ayudo para realizarlo muchas gracias
for I := 1 to Length(edit1.Text) do
if pos(edit1.Text,',')>0 then
edit2.Text:=copy(edit1.Text,i+1,(edit1.Top));
Su código me ayudo para realizarlo muchas gracias
Otra pregunta como puedo convertir un numero con punto deciomal a texto intente con esto.
Dos botones uno para los numero enteros y otro para números decimales pero no logro convertir 15,5
15 en un edit y en otro edit 5
Me podría ayudar otra vez
Muchas gracias por se ayuda
Dos botones uno para los numero enteros y otro para números decimales pero no logro convertir 15,5
15 en un edit y en otro edit 5
Me podría ayudar otra vez
Muchas gracias por se ayuda
En realidad existe una forma más fácil. En delphi existe una variable, DecimalSeparator, que puedes usar para decidir si el carácter separador es el punto o la coma, y luego utilizar el StrToFloat de toda la vida :)
Ejemplo:
DecimalSeparator := '.';
l := StrToFloat('15.5');
DecimalSeparator := ',';
l := StrToFloat('15,5');
Ejemplo:
DecimalSeparator := '.';
l := StrToFloat('15.5');
DecimalSeparator := ',';
l := StrToFloat('15,5');
Muchas gracias por la yuda lo solucione de una manera más difícil me gustaría que me diera su opinión:
En un edit puese la cantidad 15,6
Con el código de separar caracteres lo dividí en dos
15 y en otro 6 con un cero agregado para que me diera 60
Con esto use
function xIntToLletras(Numero:LongInt):String;
function xxIntToLletras(Valor:LongInt):String;
const
delimitante : array[0..1] of char=
(',',',');
centavos : array[1..9] of String =
('UN','DOS','TRES','CUATRO','CINCO','SEIS',
'SIETE','OCHO','NUEVE');
aUnidad : array[1..15] of String =
('UN','DOS','TRES','CUATRO','CINCO','SEIS',
'SIETE','OCHO','NUEVE','DIEZ','ONCE','DOCE',
'TRECE','CATORCE','QUINCE');
aCentena: array[1..9] of String =
('CIENTO','DOSCIENTOS','TRESCIENTOS',
'CUATROCIENTOS','QUINIENTOS','SEISCIENTOS',
'SETECIENTOS','OCHOCIENTOS','NOVECIENTOS');
aDecena : array[1..9] of String =
('DIECI','VEINTI','TREINTA','CUARENTA','CINCUENTA',
'SESENTA','SETENTA','OCHENTA','NOVENTA');
var
Centena, Decena, Unidad, Doble: LongInt;
Linea: String;
begin
if valor=100 then Linea:=' CIEN '
else begin
Linea:='';
Centena := Valor div 100;
Doble := Valor - (Centena*100);
Decena := (Valor div 10) - (Centena*10);
Unidad := Valor - (Decena*10) - (Centena*100);
if Centena>0 then Linea := Linea + Acentena[centena]+' ';
if Doble>0 then begin
if Doble=20 then Linea := Linea +' VEINTE '
else begin
if doble<16 then Linea := Linea + aUnidad[Doble]
else begin
Linea := Linea +' '+ Adecena[Decena];
if (Decena>2) and (Unidad<>0) then Linea := Linea+' Y ';
if Unidad>0 then Linea := Linea + aUnidad[Unidad];
end;
end;
end;
end;
Result := Linea;
end;
var
Millones,Miles,Unidades: Longint;
Linea : String;
begin
if numero=0 then Linea := 'CERO'
else if numero<0 then Linea := 'MENOS '
else if numero=1 then
begin
Linea := 'UN';
xIntToLletras := Linea;
exit
end
else if numero>1 then Linea := '';
Numero := Abs(Numero);
Millones := numero div 1000000;
Miles := (numero - (Millones*1000000)) div 1000;
Unidades := numero - ((Millones*1000000)+(Miles*1000));
if Millones=1 then Linea:= Linea + ' UN MILLON '
else if Millones>1 then Linea := Linea + xxIntToLletras(Millones)
+ ' MILLONES ';
if Miles =1 then Linea:= Linea + ' MIL '
else if Miles>1 then Linea := Linea + xxIntToLletras(Miles)+
' MIL ';
if Unidades >0 then Linea := Linea + xxIntToLletras(Unidades);
xIntToLletras := Linea;
end;
begin
button4.Click;
Label11.Caption:= xIntToLletras(StrToInt(edit7.Text));
Label27.Caption:= xIntToLletras(StrToInt(edit8.Text));
y lo unico que me falto hacer fue juntar las cantidades y lo hice de esta manera
label30.caption:=label11.caption+' con ' + label27.caption+ ' centavos';
Esta forma también funciona.
Espero su opinión
Muchas gracias
En un edit puese la cantidad 15,6
Con el código de separar caracteres lo dividí en dos
15 y en otro 6 con un cero agregado para que me diera 60
Con esto use
function xIntToLletras(Numero:LongInt):String;
function xxIntToLletras(Valor:LongInt):String;
const
delimitante : array[0..1] of char=
(',',',');
centavos : array[1..9] of String =
('UN','DOS','TRES','CUATRO','CINCO','SEIS',
'SIETE','OCHO','NUEVE');
aUnidad : array[1..15] of String =
('UN','DOS','TRES','CUATRO','CINCO','SEIS',
'SIETE','OCHO','NUEVE','DIEZ','ONCE','DOCE',
'TRECE','CATORCE','QUINCE');
aCentena: array[1..9] of String =
('CIENTO','DOSCIENTOS','TRESCIENTOS',
'CUATROCIENTOS','QUINIENTOS','SEISCIENTOS',
'SETECIENTOS','OCHOCIENTOS','NOVECIENTOS');
aDecena : array[1..9] of String =
('DIECI','VEINTI','TREINTA','CUARENTA','CINCUENTA',
'SESENTA','SETENTA','OCHENTA','NOVENTA');
var
Centena, Decena, Unidad, Doble: LongInt;
Linea: String;
begin
if valor=100 then Linea:=' CIEN '
else begin
Linea:='';
Centena := Valor div 100;
Doble := Valor - (Centena*100);
Decena := (Valor div 10) - (Centena*10);
Unidad := Valor - (Decena*10) - (Centena*100);
if Centena>0 then Linea := Linea + Acentena[centena]+' ';
if Doble>0 then begin
if Doble=20 then Linea := Linea +' VEINTE '
else begin
if doble<16 then Linea := Linea + aUnidad[Doble]
else begin
Linea := Linea +' '+ Adecena[Decena];
if (Decena>2) and (Unidad<>0) then Linea := Linea+' Y ';
if Unidad>0 then Linea := Linea + aUnidad[Unidad];
end;
end;
end;
end;
Result := Linea;
end;
var
Millones,Miles,Unidades: Longint;
Linea : String;
begin
if numero=0 then Linea := 'CERO'
else if numero<0 then Linea := 'MENOS '
else if numero=1 then
begin
Linea := 'UN';
xIntToLletras := Linea;
exit
end
else if numero>1 then Linea := '';
Numero := Abs(Numero);
Millones := numero div 1000000;
Miles := (numero - (Millones*1000000)) div 1000;
Unidades := numero - ((Millones*1000000)+(Miles*1000));
if Millones=1 then Linea:= Linea + ' UN MILLON '
else if Millones>1 then Linea := Linea + xxIntToLletras(Millones)
+ ' MILLONES ';
if Miles =1 then Linea:= Linea + ' MIL '
else if Miles>1 then Linea := Linea + xxIntToLletras(Miles)+
' MIL ';
if Unidades >0 then Linea := Linea + xxIntToLletras(Unidades);
xIntToLletras := Linea;
end;
begin
button4.Click;
Label11.Caption:= xIntToLletras(StrToInt(edit7.Text));
Label27.Caption:= xIntToLletras(StrToInt(edit8.Text));
y lo unico que me falto hacer fue juntar las cantidades y lo hice de esta manera
label30.caption:=label11.caption+' con ' + label27.caption+ ' centavos';
Esta forma también funciona.
Espero su opinión
Muchas gracias
Olvide esto para poder hacer los cambios de los edits puse otro botón con estecodigo
for I := 1 to Length(edit7.Text) do
if pos(edit7.Text,',')>0 then
edit8.Text:=copy(edit7.Text,i+1,(edit7.Top))+'0';
edit7.Text:=copy(edit7.text,1,length(edit7.text)-2);
function xIntToLletras(Numero:LongInt):String;
Para copiar los números de un edit a otro
15,15
Me pone
En un edit 15 y en otro 15
Con esto delimite los caracteres y continué con las conversiones a letras gracias.
for I := 1 to Length(edit7.Text) do
if pos(edit7.Text,',')>0 then
edit8.Text:=copy(edit7.Text,i+1,(edit7.Top))+'0';
edit7.Text:=copy(edit7.text,1,length(edit7.text)-2);
function xIntToLletras(Numero:LongInt):String;
Para copiar los números de un edit a otro
15,15
Me pone
En un edit 15 y en otro 15
Con esto delimite los caracteres y continué con las conversiones a letras gracias.
Cuanto botón :)
¿Y por qué no haces las impresiones de los números en el evento "onchange" de los edits?
Así, sin pulsar botones, te lo mostraría también :)
Adelante con ello, esta es una muy buena forma de aprender a programar ;D
¿Y por qué no haces las impresiones de los números en el evento "onchange" de los edits?
Así, sin pulsar botones, te lo mostraría también :)
Adelante con ello, esta es una muy buena forma de aprender a programar ;D
Lo intente antes de que me sugiriera esta opción y me da un resultado erróneo.
Me da una cantidad u en la otra una letra y un nomero
al convertirlo me decía que no era una expresión valida y lo resolví de otra manera que fue esta
edit10.Text:=IntToStr(Length(edit9.Text));
begin
if edit10.Text='2' then
edit7.Text:=label17.Caption+',00'
ELSE
EDIT7.Text:=LABEL17.Caption+'0';
for I := 1 to Length(edit7.Text) do
if pos(edit7.Text,',')>0 then
edit8.Text:=copy(edit7.Text,i+1,(edit7.Top));
edit7.Text:=copy(edit7.text,1,length(edit7.text)-3);
Si esta de acuerdo voy a finalizar la pregunta para no quitarle el tiempo
muchas gracias por su ayuda me sirvió mucho y lo más importante fue que aprendí.
Me da una cantidad u en la otra una letra y un nomero
al convertirlo me decía que no era una expresión valida y lo resolví de otra manera que fue esta
edit10.Text:=IntToStr(Length(edit9.Text));
begin
if edit10.Text='2' then
edit7.Text:=label17.Caption+',00'
ELSE
EDIT7.Text:=LABEL17.Caption+'0';
for I := 1 to Length(edit7.Text) do
if pos(edit7.Text,',')>0 then
edit8.Text:=copy(edit7.Text,i+1,(edit7.Top));
edit7.Text:=copy(edit7.text,1,length(edit7.text)-3);
Si esta de acuerdo voy a finalizar la pregunta para no quitarle el tiempo
muchas gracias por su ayuda me sirvió mucho y lo más importante fue que aprendí.
Yo creo que tu solución está muy bien, y si cumple con tus necesidades, perfecto.
En la verión de Delphi que yo utilizo existe una función StrToIntDef que sirve para transformar de cadenas a integer e indicar una cantidad por defecto (por ejemplo, 0) en el caso de que la cadena no sea un número correcto.
Quizá te iría bien probarla para el tema del onChange.
En la verión de Delphi que yo utilizo existe una función StrToIntDef que sirve para transformar de cadenas a integer e indicar una cantidad por defecto (por ejemplo, 0) en el caso de que la cadena no sea un número correcto.
Quizá te iría bien probarla para el tema del onChange.
- Compartir respuesta
- Anónimo
ahora mismo