Ir al contenido


Foto

[DELPHI] Separar palabras


  • Por favor identifícate para responder
7 respuestas en este tema

#1 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 24 noviembre 2010 - 08:38

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
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 24 noviembre 2010 - 09:36

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
  • 4.483 mensajes
  • LocationVenezuela

Escrito 25 noviembre 2010 - 04:46

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
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 25 noviembre 2010 - 05:17

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
  • 4.483 mensajes
  • LocationVenezuela

Escrito 25 noviembre 2010 - 06:14

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

#6 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 25 noviembre 2010 - 06:41

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 mensajes
  • LocationMaracaibo

Escrito 26 noviembre 2010 - 11:10

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
  • 4.483 mensajes
  • LocationVenezuela

Escrito 26 noviembre 2010 - 11:23

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

  • 0




IP.Board spam blocked by CleanTalk.