Ver Mensaje Individual
  #9 (permalink)  
Antiguo 21/04/2008, 10:49
Avatar de dropthebass
dropthebass
 
Fecha de Ingreso: abril-2008
Mensajes: 27
Antigüedad: 16 años, 7 meses
Puntos: 0
Re: PL/SQL/Procedimiento: Invertir frase por palabras

Antes de nada agradecerte la ayuda, ya voy compendiendo mejor lo que me dices, pero no acaba de funcionarme y tengo alguna duda más.
Te copio el código y te comento:

Código:
CREATE OR REPLACE PROCEDURE reves_frase (cadena VARCHAR2)
AS
paraula_rev VARCHAR2(20);
paraula VARCHAR2(20);
frase_rev VARCHAR2(20);
caracter VARCHAR2(1) default ' ' ;
posicion NUMBER;
cantidad NUMBER default 0;
contador NUMBER default 0;
x NUMBER;

BEGIN

FOR x IN 1..LENGTH(cadena) LOOP      
caracter := SUBSTR(cadena,x,1);
IF caracter = ' ' THEN
cantidad:= cantidad+1;
END IF;
END LOOP;

WHILE contador <= cantidad LOOP
posicion:=INSTR(cadena,' ');
paraula:= SUBSTR(cadena,1,posicion);

x := LENGTH(paraula);
WHILE x >= 1 LOOP
paraula_rev := paraula_rev || SUBSTR(paraula, x , 1); 
x := x -1;
END LOOP;
contador:= contador+1;
END LOOP;
frase_rev := frase_rev || paraula_rev;
DBMS_OUTPUT.PUT_LINE(frase_rev);
END;
Con el primer bucle FOR saco la cantidad de espacios que hay en la frase. Así se cuantas palabras hay que girar. Luego en el bucle WHILE voy a repetir la acción de girar la palabra tanas veces como espacios habia encontrado antes.

Utilizo otro WHILE que me gira la palabra y la guarda, para posteriormente concatenerla en la frase.

El problema de este código es que sólo me gira y concatena la primera palabra tantas veces como espacios hay. Y es lógico ya que estoy sacando siempre las letras desde la posición 1 hasta la posición del primer espacio. Ahora no se como montarmelo para que siga procesando toda la frase.

Código:
posicion:=INSTR(cadena,' ');
paraula:= SUBSTR(cadena,1,posicion);
"posicion" saca la posición del primer espacio en blanco, pero¿¿¿como puedo sacar la posición de los siguientes???
Luego en "palabra" habría que hacer el SUBSTR desde la posición siguiente al espacio anterior y hasta el siguiente espacio. Eso como lo pongo en un bucle??

Creía que iba entendiendo las cosas, pero cada vez salen más problemas, espero vuestra ayuda, gracias!!! ;)