Foros del Web » Programando para Internet » ASP Clásico »

Función que me tiene atascado...

Estas en el tema de Función que me tiene atascado... en el foro de ASP Clásico en Foros del Web. Hola a todos... Tengo una función que lo que hace es poner en mayúsculas la inicial de una palabra o varias palabras (está pensada para ...
  #1 (permalink)  
Antiguo 22/02/2005, 08:57
Avatar de 3pies
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Desde una destilería
Mensajes: 2.584
Antigüedad: 20 años, 6 meses
Puntos: 144
Mensaje Función que me tiene atascado...

Hola a todos...

Tengo una función que lo que hace es poner en mayúsculas la inicial de una palabra o varias palabras (está pensada para recuperar el nombre y apellidos de un campo de la BD). Bueno, la función que tengo es esta:
Código:
    Function InicialEnMayusculas(cadena)
    'Descomponemos la cadena, en subcadenas,
    'para lo cual indicamos el delimitador " "
    cadena = Split(Trim(cadena), " ")
    'miramos las palabras que componen la cadena,
    'para lo cual le decimos que recorra desde el primer
    'valor de la matriz, hasta el último
    For i = 0 To UBound(cadena)
        'ponemos la inicial en mayúsculas, y el resto en minúsculas
        cadena(i) = UCase(Left(cadena(i), 1)) & LCase(Right(cadena(i), Len(cadena(i)) - 1))
    Next
    'Unimos las cadenas
    cadena = Join(cadena)
    InicialEnMayusculas=cadena
end function
Aparentemente funciona, pues si tengo en la BD

Código:
pepito pérez
Me mostrará: Pepito Pérez

Pero si tengo
Código:
pepito    pérez
Me da error, puesto que entre "pepito" y "pérez", hay más de un espacio en blanco. El error de la función me viene cuando has más de un espacio entre dos palabras.

¿Alguien me echa una mano?. Estoy atascado desde hace más de 2 horas, pues todo lo que pruebo no me funciona.

Gracias por vuestra colaboración.
  #2 (permalink)  
Antiguo 22/02/2005, 09:29
 
Fecha de Ingreso: mayo-2003
Mensajes: 866
Antigüedad: 21 años, 1 mes
Puntos: 0
Esto no lo soluciona del todo, pero espero darte una pista para que sigas trabajando.
Si el numero de espacios es impar te muestra solo un espacio en blanco,
pero si el numero de espacios es par te une las palabras.

<%Function InicialEnMayusculas(cadena)
'Descomponemos la cadena, en subcadenas,
'para lo cual indicamos el delimitador " "

If InStr(cadena, " ") Then
cadena =Replace(cadena, " ", "", 1, -1, 1)
Else
End if


cadena = Split(Trim(cadena), " ")
'miramos las palabras que componen la cadena,
'para lo cual le decimos que recorra desde el primer
'valor de la matriz, hasta el último
For i = 0 To UBound(cadena)
'ponemos la inicial en mayúsculas, y el resto en minúsculas
cadena(i) = UCase(Left(cadena(i), 1)) & LCase(Right(cadena(i), Len(cadena(i)) - 1))
Next
'Unimos las cadenas
cadena = Join(cadena)
InicialEnMayusculas=cadena
end function
%>
<%Cadena="pepito pérez"%>
<%=InicialEnMayusculas(cadena)%>
  #3 (permalink)  
Antiguo 22/02/2005, 09:54
Avatar de 3pies
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Desde una destilería
Mensajes: 2.584
Antigüedad: 20 años, 6 meses
Puntos: 144
Hola sqa212...

Si lo pongo antes del split, me une la cadena (por el replace), con lo cual la matriz solo tiene un componente ("pepitopérez"), ya que no hay espacios por donde separar los elementos de la matriz con el espacio indicado como separador del split.

Si la pongo debajo, me da error.

¿Alguna sugerencia?.
  #4 (permalink)  
Antiguo 22/02/2005, 10:01
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 3 meses
Puntos: 535
Fijate esta función: http://www.aspfaq.com/show.asp?id=2299
__________________
...___...
  #5 (permalink)  
Antiguo 22/02/2005, 10:13
 
Fecha de Ingreso: mayo-2003
Mensajes: 866
Antigüedad: 21 años, 1 mes
Puntos: 0
Esta si funciona
  #6 (permalink)  
Antiguo 22/02/2005, 10:20
Avatar de 3pies
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Desde una destilería
Mensajes: 2.584
Antigüedad: 20 años, 6 meses
Puntos: 144
Gracias Al Zuwaga, pero tiene un pequeño problemilla la función esa:

A pesar de que los caracteres los pone en mayúsculas, deja los mismos espacios en blanco que tiene la cadena original:

Código:
pepito        pérez   ----------> Pepito        Pérez
He hecho otra función que da los mismos resultados que esa del link (que la verdad, para uno como yo que no se dedica a este mundillo, me parece bastante enrevesada). Es esta, que hace lo mismo:

Código:
function InicialEnMayusculas(cadena)
    cadena = Trim(cadena)
    'ponemos el primer caracter en mayúsculas
    'comenzamos el bucle, más lento, poooooooorque recorreeeeeee letra a letraaaaaaaaaaa
    'empezamos con el segundo caracter
    For i = 2 To Len(cadena)
    'pasamos a la siguiente letra usando la función Mid
    'que nos retorna la subcadena incluida dentro de "cadena", empezando
    'en la posición "i", y tomando un solo caracter (de ahí el 1),
    'y la ponemos en minúsculas
        If letra = " " Then
            'Si se encuentra con un espacio en blanco, que el siguiente
            'caracter lo ponga en mayúsculas
            letra = UCase(Mid(cadena, i, 1))
        Else
            letra = LCase(Mid(cadena, i, 1))
        End If
    nueva_cadena = nueva_cadena & letra
    Next
    'Unimos la primera letra con el resto
    cadena = primera_letra & nueva_cadena
    IncialEnMayusculas=cadena
end function
¿Alguna sugerencia más?. Gracias de nuevo!
  #7 (permalink)  
Antiguo 22/02/2005, 10:26
Avatar de Muzztein  
Fecha de Ingreso: agosto-2002
Ubicación: Hangar 18
Mensajes: 1.703
Antigüedad: 21 años, 9 meses
Puntos: 16
concepto: separar el dato de la forma en que se va amostrar.

el dato no deberia ser amarrado con un formato en especifico.
para lograr el efecto deseado debe ocuparse css.
  #8 (permalink)  
Antiguo 22/02/2005, 10:44
Avatar de 3pies
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Desde una destilería
Mensajes: 2.584
Antigüedad: 20 años, 6 meses
Puntos: 144
Ya sabemos que hay gente que ingresa su nombre o cualquier otro dato (nick, o lo que sea), y lo ponen todo en mayúsculas (PEPITO PÉREZ), otros que lo ponen todo en minúscula (pepito pérez), y otros que dejan n espacios entre palabras, porque tienen Parkinson (pepito pérez). Lo que pretendo, es que al listar esos datos, salgan todos de una forma homogénea, sin meter unos en mayúsculas, otros en minúsculas, quitando espacios de sobras, etc...

La verdad, dudo que con css se pueda hacer eso...
  #9 (permalink)  
Antiguo 22/02/2005, 10:51
Avatar de Muzztein  
Fecha de Ingreso: agosto-2002
Ubicación: Hangar 18
Mensajes: 1.703
Antigüedad: 21 años, 9 meses
Puntos: 16
equivocado estas
  #10 (permalink)  
Antiguo 22/02/2005, 10:58
Avatar de 3pies
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Desde una destilería
Mensajes: 2.584
Antigüedad: 20 años, 6 meses
Puntos: 144
Entonces, reformulo mi pregunta:

¿Cómo podría eliminar los espacios que sobran de un texto recuperado de una BD, y como podría poner las iniciales en mayúsculas, utilizando CSS?.

Agradecería al moderador que no me enviase al foro de CSS
  #11 (permalink)  
Antiguo 22/02/2005, 11:33
Avatar de PMP
PMP
 
Fecha de Ingreso: febrero-2003
Ubicación: Chacabuco - Buenos Aires
Mensajes: 214
Antigüedad: 21 años, 3 meses
Puntos: 1
Si entre las palabras hay mas de un espacio lo que puedes hacer es.
Código:
While Instr(cadena, "  ")
   Replace(cadena, "  ", " ")
Wend
  #12 (permalink)  
Antiguo 22/02/2005, 11:46
Avatar de 3pies
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Desde una destilería
Mensajes: 2.584
Antigüedad: 20 años, 6 meses
Puntos: 144
Ahora sí funciona 100%. Si es que a veces me complico la vida innecesariamente...

Te lo agradezco un montón. No había caido en esa solución.

Une vez más, muchas gracias PMP!
  #13 (permalink)  
Antiguo 22/02/2005, 11:47
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 3 meses
Puntos: 535
No, no te envío al foro de CSS porque la duda inicial es de ASP.


Cita:
Dile a tu jefe lo que realmente piensas de él, y la verdad te hará libre. (Patrick Murray).
...

Cita:
Dile a tu jefe lo que realmente piensas de él luego de haberte asegurado otro empleo. (Al Zuwaga).
...
__________________
...___...
  #14 (permalink)  
Antiguo 22/02/2005, 11:54
Avatar de 3pies
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Desde una destilería
Mensajes: 2.584
Antigüedad: 20 años, 6 meses
Puntos: 144
Eso es "pal" que tenga jefe, porque aquí hay mucho que va por libre, jajajajaja. Es una pena que no seamos tan valientes como Patrick Murray
  #15 (permalink)  
Antiguo 22/02/2005, 12:01
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 3 meses
Puntos: 535
Bueno, creo que no es tanto la valentía sino la relación con tu jefe y su forma de ser o de pensar. Con el mío hay mucha confianza y puedo decirle "casi" cualquier cosa que lo va a entender o por lo menos sé que me va a escuchar.. pero conozco otros que no se le puede decir otra cosa que "si" porque son dueños de la verdad absoluta, o al menos eso creen..

saludos
__________________
...___...
  #16 (permalink)  
Antiguo 22/02/2005, 12:16
Avatar de 3pies
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Desde una destilería
Mensajes: 2.584
Antigüedad: 20 años, 6 meses
Puntos: 144
Creo que eres un privilegiado Al Zuwaga...

El 99% de los encuestados (*) piensa que su jefe es un incompetente, que está ahí por ser un pelota, un trepa, o simplemente por ser hijo de papá empresario (y eso que el jefe ya está para jubilarse). Que no sabe hacer la "O" con un canuto (ni siquiera se los fuma, porque si se lo fumara, y te pasara una caladita, jajajaja...), que tú le haces el trabajo y él se pone las medallas, que delega todo (hasta la responsabilidad, que es indelegable, ...ya sabes a que responsabilidad me refiero: a la que existe en los casos en que alguien ha cometido un error, no asumiendo ellos su parte -o toda- la culpa), que cobran el doble que tú (cuando digo el doble, es el doble, como en mi caso, jajajaja), y un sinfín de cosas más. Pero bueno, como bien demuestras, de todo hay en la viña del señor (¡oremos!), y también hay jefes al estilo de lo que se supone que debe ser un jefe o un directivo de empresa.

(*) Encuesta ficticia, publicada en un periódico inexistente, pero que a todos nos suena.

PD: Perdón por este momento de relax, que me he permitido.
  #17 (permalink)  
Antiguo 22/02/2005, 12:35
 
Fecha de Ingreso: noviembre-2003
Ubicación: México
Mensajes: 49
Antigüedad: 20 años, 7 meses
Puntos: 0
Vi un codigo que te puede servir...hay que hacer unas mofificaciones, pero estas son sencillas.

El codigo que menciono sirve para poder hacer una frase sin importar si es en mayusculas o minusculas a tipo Frase. Esto es que ponga mayuscula despues de punto.
Ademas tiene una funcion para poder eliminar espacios entre palabras si es que estos son mayores a un espacio.

http://www.tutoriales.com.mx/directo...d_categoria=16

Espero que te sirva,
__________________
Zolw
Entra a http://tutoriales.xlso.com puedes encontras tips, scripts y ayudas para ASP, ASP.NET, PHP, VB, HTML, DHTML, Flash, JavaScript y más...
MÉXICO
  #18 (permalink)  
Antiguo 22/02/2005, 12:39
 
Fecha de Ingreso: noviembre-2003
Ubicación: México
Mensajes: 49
Antigüedad: 20 años, 7 meses
Puntos: 0
Y aqui tienes un pequeño codigo que sirve para poder eliminar espacios que sean mayores a un espacio entre palabras.

Código:
'Teniendo una frase cualquiera
frase = "hola      esto es     una prueba"

'Quitamos todos los espacios extras
For quita_espacios = 10 to 2 Step -1
	For espacio = 1 to quita_espacios
		mete_espacio = mete_espacio & " "
	Next
	frase = Replace(frase,mete_espacio," ")
	mete_espacio = ""
Next
Te dará como resultado: hola esto es una prueba
__________________
Zolw
Entra a http://tutoriales.xlso.com puedes encontras tips, scripts y ayudas para ASP, ASP.NET, PHP, VB, HTML, DHTML, Flash, JavaScript y más...
MÉXICO
  #19 (permalink)  
Antiguo 22/02/2005, 12:41
Avatar de 3pies
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Desde una destilería
Mensajes: 2.584
Antigüedad: 20 años, 6 meses
Puntos: 144
Gracias Zolw. Interesante función.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:59.