Retroceder   Foros del Web > Programación para sitios web > .NET

Respuesta
 
Herramientas Desplegado
Antiguo 02-jun-2005, 04:12   #1 (permalink)
Phoncadiz está en el buen camino
 
Avatar de Phoncadiz
 
Fecha de Ingreso: mayo-2004
Ubicación: Cádiz City
Mensajes: 207
Relleno de ceros a la izquierda

Hola Foreros!

Estoy en una aplicación WebForm en VB.NET y me preguntaba si existía una función interna en la que enviándole dos números haga lo siguiente:

rellenaCeros (14,4) = 0014

Saludos!!
__________________
Tantas horas delante de una pantalla servirá para algo....
[Phoncadiz; mínimo 8 h. al día con el PC] :stress:
Phoncadiz está desconectado   Responder Citando
Antiguo 02-jun-2005, 04:39   #2 (permalink)
erkillo ha deshabilitado el karma
 
Fecha de Ingreso: abril-2005
Mensajes: 82
No entiendo.... Que quieres que haga????
erkillo está desconectado   Responder Citando
Antiguo 02-jun-2005, 06:49   #3 (permalink)
Phoncadiz está en el buen camino
 
Avatar de Phoncadiz
 
Fecha de Ingreso: mayo-2004
Ubicación: Cádiz City
Mensajes: 207
Vaya, es verdad. No he puesto lo que quería que hiciera.

14 es ún número entero cualquiera
y 4 es el número de caracteres que deseo que tenga la cadena en total.^

Así que si a la función le llega un 14 (tiene 2 caracteres numéricos) por un lado y un 4 que le indica que tiene que ser una cadena con 4 número el resultado es 0014 (4 caracteres)

Tal como pongo en el título, símplemente es rellenar de ceros a la izquierda hasta llegar al número de caracteres que indique la función. Ejemplos:

(312,8) = 00000312
(9,2) = 09
(9,1) = 9
(99,1) = error

Creo que está claro.
__________________
Tantas horas delante de una pantalla servirá para algo....
[Phoncadiz; mínimo 8 h. al día con el PC] :stress:
Phoncadiz está desconectado   Responder Citando
Antiguo 02-jun-2005, 07:41   #4 (permalink)
Jose_minglein2 tiene algunos puntos positivos de karma
 
Avatar de Jose_minglein2
 
Fecha de Ingreso: noviembre-2004
Mensajes: 2.334
Que yo sepa no existe, pero sería fácil implementarla
Jose_minglein2 está desconectado   Responder Citando
Antiguo 02-jun-2005, 08:04   #5 (permalink)
charlytesis está en el buen camino
 
Avatar de charlytesis
 
Fecha de Ingreso: agosto-2003
Ubicación: La Paz - Bolivia
Mensajes: 206
Si lo haces con unos if's y manejando los ceros, puedes realizar el relleno de ceros...

num=14
relleno=4

long=len(num)

if relleno<>long then
rellenar
end if

completalo y veras que te sale...

saludos
__________________

Saludos desde el corazón de América.....BOLIVIA
Da lo mejor de ti, que siempre será recompensado


charlytesis está desconectado   Responder Citando
Antiguo 02-jun-2005, 08:07   #6 (permalink)
Moderador
RootK llegará a ser famoso muy prontoRootK llegará a ser famoso muy pronto
 
Avatar de RootK
 
Fecha de Ingreso: noviembre-2002
Ubicación: México D.F
Mensajes: 7.528
Enviar un mensaje por MSN a RootK
Te paso un ejemplo de como te quedaría:


Cita:
Private Function GetZeros(ByVal iNum As Integer, ByVal iLimit As Integer) As String
Dim iLength As Integer = iNum.ToString.Length
Dim s As String

If iLength < iLimit Then
For i As Integer = 1 To iLimit - iLength
s += "0"
Next
s += iNum.ToString
Else
s = "Error"
End If

Return s
End Function
Y para llamarla:

Cita:
Response.Write(GetZeros(312, 9))

Salu2
__________________
Nadie roba nada ya que en la vida todo se paga . . .
RootK está desconectado   Responder Citando
Antiguo 02-jun-2005, 09:13   #7 (permalink)
Phoncadiz está en el buen camino
 
Avatar de Phoncadiz
 
Fecha de Ingreso: mayo-2004
Ubicación: Cádiz City
Mensajes: 207
Muchas gracias a todos los que habeis participado.

Ya se que podía implementarla. Pero era para ahorrarme trabajo si es que existía o incluso si se podría realizar en una sola línea de código uniendo un par de funciones de las de toda la vida.

De todas formas... un millón de gracias!!!
__________________
Tantas horas delante de una pantalla servirá para algo....
[Phoncadiz; mínimo 8 h. al día con el PC] :stress:
Phoncadiz está desconectado   Responder Citando
Antiguo 02-jun-2005, 10:23   #8 (permalink)
MaxExtreme ha deshabilitado el karma
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Para quien lo quiera para VC++ o una DLL para llamar y que sea rápido, he hecho una función estilo a las ANSI-C en inline ASM...

Código:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/*******************************************
* Rellena con ceros a la izquierda - MaxExtreme
*
**** Argumentos ****
* numero - Número origen al que se añadirán ceros
* destino - Puntero donde se guardará el resultado
* cifras - Cifras totales que tendrá la string destino
*
**** Devuelve ****
* ret==0	OK
* ret!=0	ERROR
******************************************/
int Rellenar(int numero, char * destino, int cifras)
{
	static char buffer[11];

	__asm
	{
		pusha

		lea edx, buffer
		push 10d
		push edx
		push numero
		call itoa
		add esp, 0Ch
		push eax
		call strlen
		pop edx

		mov ebx, destino
		mov ecx, cifras
		mov byte ptr [ebx+ecx], 0h
		sub ecx, eax
		mov edx, ecx

		cmp eax, cifras
		jg error
		je igual

ceros:		mov byte ptr [ebx+ecx-1], 30h
		loop ceros

igual:		add ebx, edx
		mov ecx, eax
		lea edx, buffer
num:		mov al, byte ptr [edx+ecx-1]
		mov byte ptr [ebx+ecx-1], al
		loop num


		popa
		mov eax, 0h
		jmp fin

error:		popa
		mov eax, 1h

fin:
	}
}



void main()
{
	// Rellenamos parte de la cadena para comprobar que se incluye el terminador \0
	char destino[100]="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";

	// Rellenamos con el número 12345 con 10 cifras -> OK
	if(Rellenar(12345,destino,10)==0)	printf("%s\n",destino);
	else						printf("Error\n");

	// Rellenamos con el número 12345 con 5 cifras -> OK
	if(Rellenar(12345,destino,5)==0)	printf("%s\n",destino);
	else						printf("Error\n");

	// Rellenamos con el número 12345 con 3 cifras -> ERROR
	if(Rellenar(12345,destino,3)==0)	printf("%s\n",destino);
	else						printf("Error\n");
}
Ese ejemplo devuelve lo que se espera:
Código:
0000012345
12345
Error
No sé si se puede optimizar más, pero ahí queda como curiosidad...

** EDIT: pops sustituidos por add dado que itoa devuelve el puntero que se le pasa y por lo tanto lo tenemos en eax para hacer push a strlen sin usar edx - Eternal Idol

Última edición por MaxExtreme; 02-jun-2005 a las 14:01.
MaxExtreme está desconectado   Responder Citando
Respuesta

Calificación: Calificación de Tema: 1 votos, 4,00 de promedio.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 19:37.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93