Jump to content


Photo

[DELPHI] Separar palabras


  • Please log in to reply
7 replies to this topic

#1 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4483 posts
  • LocationVenezuela

Posted 24 November 2010 - 08:38 AM

Esto mas que un truco o un consejo lo coloco para depurarlo entre todos, claro entre los que quieran ayudar  :D

La siguiente función divide una palabra dado un largo, la división la realiza agragandole el salto de linea (#13#10). El tamaño de la división no sera exacto como el largo, se tomara en cuenta el siguiente espacio.




delphi
  1. procedure SepararPalabras(Largo: Integer; var Palabra: String);
  2. var
  3.   cTemp: String;
  4.   nIdx, SumaLargo, LargoActual: Integer;
  5. begin
  6.   //Verifica que la palabra sea mayor que la cantidad por linea
  7.   if Length(Palabra) > Largo then
  8.   begin
  9.       cTemp := '';
  10.       SumaLargo := 0;
  11.       //Recorre la palabra para ir diviendola
  12.       while SumaLargo < Length(Palabra) do
  13.  
  14.       begin
  15.         //Verifica si el caracter actual es espacio
  16.         if (Copy(Palabra, SumaLargo + Largo, 1) = ' ') then //Actual
  17.             //toma el largo donde debe ir
  18.             LargoActual := Largo
  19.         else
  20.         begin
  21.             //Calcula el proximo espacio
  22.             if Pos(' ', Copy(Palabra, SumaLargo + Largo, Length(Palabra))) > 0 then
  23.               //Si hay un espacio
  24.               LargoActual :=  Largo + Pos(' ', Copy(Palabra, SumaLargo + Largo, Length(Palabra))) - 1
  25.             else
  26.               //Llega al final de la palabra
  27.               LargoActual := Length(Palabra) - SumaLargo + 1;
  28.         end;
  29.         //Divide la palabra un LARGO a la vez
  30.         cTemp := cTemp + Trim(Copy(Palabra, (SumaLargo), LargoActual));
  31.         //Acumula los largos
  32.         SumaLargo := SumaLargo + LargoActual;
  33.  
  34.         //Agrega el salto de linea
  35.         cTemp := cTemp + #13#10;
  36.       end;
  37.       //Devuelve la palabra completa
  38.       Palabra := cTemp;
  39.   end; //Verifica que la palabra sea mayor que la cantidad por linea
  40.  
  41.  
  42. end;


  • 0

#2 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4107 posts
  • LocationMadrid - España

Posted 24 November 2010 - 09:36 PM

Esta es mi propuesta:



delphi
  1. function SepararPalabras(S: string; Len: integer): string;
  2. var
  3.   i, f: integer;
  4. begin
  5.   i:= 1;
  6.   f:= i;
  7.   if Len > Length(S) then Len:= Length(S);
  8.   while i<= Length(S) do
  9.   begin
  10.     while (f-i < Len) or  (S[f] <> ' ') do inc(f);
  11.     Result:= Result + Trim(Copy(S, i, f-i)) + #13+#10;
  12.     i:=f+1;
  13.   end;
  14. end;



Saludos.
  • 0

#3 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4483 posts
  • LocationVenezuela

Posted 25 November 2010 - 04:46 AM

Esta es mi propuesta:



delphi
  1. function SepararPalabras(S: string; Len: integer): string;
  2. var
  3.   i, f: integer;
  4. begin
  5.   i:= 1;
  6.   f:= i;
  7.   if Len > Length(S) then Len:= Length(S);
  8.   while i<= Length(S) do
  9.   begin
  10.     while (f-i < Len) or  (S[f] <> ' ') do inc(f);
  11.     Result:= Result + Trim(Copy(S, i, f-i)) + #13+#10;
  12.     i:=f+1;
  13.   end;
  14. end;



Saludos.


Lo probastes, creo no funciona :(
  • 0

#4 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4107 posts
  • LocationMadrid - España

Posted 25 November 2010 - 05:17 AM

Si, lo he probado y funciona.  :)

Ten en cuenta que no paso el string por referencia sino que la función devuelve el resultado.
He pensado que quizás es mejor así para no perder la cadena original...

Te subo un ejemplo.  ;)

Saludos.
  • 0

#5 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4483 posts
  • LocationVenezuela

Posted 25 November 2010 - 06:14 AM

Tienes razon jajaja, errores de novato :D, deja que pruebo de nuevo
  • 0

#6 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4107 posts
  • LocationMadrid - España

Posted 25 November 2010 - 06:41 AM

Tienes razon jajaja, errores de novato :D , deja que pruebo de nuevo


¿Novato?  :|

Despistadillo... ;)

Saludos.
  • 0

#7 jorgeu

jorgeu

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 179 posts
  • LocationMaracaibo

Posted 26 November 2010 - 11:10 AM

La siguiente función divide una palabra dado un largo, la división la realiza agragandole el salto de linea (#13#10). El tamaño de la división no sera exacto como el largo, se tomara en cuenta el siguiente espacio.


Supongo que también es un reto entender lo que dices jajajaja
  • 0

#8 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4483 posts
  • LocationVenezuela

Posted 26 November 2010 - 11:23 AM

jajajaj es que no es tan facil redactar el resultado de eso

  • 0




IP.Board spam blocked by CleanTalk.