elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Division Silabas Texto
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Division Silabas Texto  (Leído 5,268 veces)
eRXeTe

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Division Silabas Texto
« en: 10 Febrero 2017, 08:41 am »

Buenas. Me gustaría que alguien me pudiese ayudar con este tema. Necesito en código C# la división de un texto por carácteres saltando de línea. Pero en esa division se debe evitar (en la medida de lo posible) la división por sílabas. Añadiendo un -. Ejemplo:
lorem ipsum dolor sit amet consectetur adipiscing elit
Columnas: 5
 
Lorem
ipsum
dolor
sit
amet
con-
secte-
tur a-
dipis-
cing
elit
 

El código que tengo de momento es éste, esta hecho en PHP que me es más facil:

Código
  1. <?php
  2.  
  3. // Texto (Introducido por el usuario)
  4. $text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam accumsan mattis diam vitae finibus. Maecenas id sagittis arcu. Mauris ac augue turpis. Vestibulum rhoncus ultrices placerat. Proin egestas pulvinar velit, a dignissim massa convallis non. Aliquam mi neque, sagittis ac auctor porta, luctus at ligula. Donec tortor diam, consectetur eget turpis id, finibus hendrerit lacus. Vivamus tempus eros sed accumsan venenatis.";
  5.  
  6. // Número de columnas (Introducidas por el usuario)
  7. $columns = 10;
  8.  
  9. // Calcular la longitud del texto
  10. $length = strlen($text);
  11.  
  12. /**
  13. * $i - Permite ir imprimendo el caracter dentro del texto
  14. * $j - Permite controlar el salto de línea
  15. */
  16. for ($i = $j = 0; $i < $length; $i++) {
  17.                // Comprobar si hay que realizar un salto de línea
  18.                if ($j == $columns) {
  19.                               // Imprimir salto de línea
  20.                              echo $text[$i];
  21.                               echo "<br/>";
  22.                               // Reiniciar el contador para el salto de línea
  23.                               $j = 0;
  24.                               // Saltar a la siguiente iteración del bucle
  25.                               continue;
  26.                }
  27.                // El siguiente IF sustituye los espacios por guiones bajos
  28.                // para verlos mejor. Se puede quitar.
  29.                if ($text[$i] == ' ') {
  30.                               echo " ";
  31.                } else {
  32.                               // Imprimir el caracter correspondiente
  33.                               echo $text[$i];
  34.                }
  35.                // Incrementar el contador para el salto de línea
  36.                $j++;
  37. }
  38.  
  39. ?>
  40.  
Muchisimas gracias de antemano.




· Los códigos deben ir en etiquetas GeSHi
>aquí las reglas del foro
-Engel Lex


« Última modificación: 10 Febrero 2017, 11:13 am por engel lex » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: Division Silabas Texto
« Respuesta #1 en: 10 Febrero 2017, 17:11 pm »

Hola. Primero de todo, las preguntas sobre C# van en el subforo de programación .NET.

Las reglas de divisón que quieres aplicar a las palabras de más de "X" caracteres/columnas no están claras. Aquí abajo te muestro un código de ejemplo que puedes adaptar a tus necesidades:

Código
  1. readonly string input = "Lorem ipsum dolor sit amet consectetur adipiscing elit";
  2. readonly char lfChar = '-'; // Line Feed Character Representation
  3. readonly short maxLen = 5;  // Maximum Length (not counting the line feed char)

Código
  1. StringBuilder sb = new StringBuilder(capacity: input.Length);
  2. IEnumerable<string> words = input.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); // Split entire string into words.
  3.  
  4. foreach (string word in words) {
  5.  
  6.    if ((word.Length <= maxLen)) {
  7.        sb.AppendLine(word);
  8.  
  9.    } else {
  10.        int index = 0;
  11.        while ((index < word.Length))  {
  12.            string str = word.Substring(index, Math.Min(maxLen, (word.Length - index)));
  13.            if ((str.Length == maxLen)) {
  14.                sb.AppendLine(string.Format("{0}{1}", str, lfChar));
  15.            } else {
  16.                sb.AppendLine(str);
  17.            }
  18.            index += maxLen;
  19.        }
  20.  
  21.    }
  22.  
  23. }
  24.  
  25. Console.WriteLine(sb.ToString());

Resultado de ejecución:

Lorem
ipsum
dolor
sit
amet
conse-
ctetu-
r
adipi-
scing-
elit


Saludos!


« Última modificación: 10 Febrero 2017, 17:21 pm por Eleкtro » En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.348


Ver Perfil
Re: Division Silabas Texto
« Respuesta #2 en: 10 Febrero 2017, 17:29 pm »

BLA,BLA,BLA...
« Última modificación: 14 Diciembre 2020, 18:21 pm por Serapis » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: Division Silabas Texto
« Respuesta #3 en: 10 Febrero 2017, 18:06 pm »

para partir por sílabas en castellano, lo primero que debes hacer es determinar las reglas que rigen lo que es una 'sílaba'...

El usuario no se sabe realmente lo que quiere, por que ha dicho EVITAR partir por sílabas, pero en el ejemplo hay sílabas, y aparte luego está tur a- que incluye un espacio en blanco no sé con qué lógica usada, cuando sit y amet las separa del todo en el ejemplo. Para mi no está nada claro.

De todas formas logicamente llevas mucha razón en eso que has dicho, construir las reglas de distinción de una sílaba para instruir al algoritmo sería algo necesario, tanto para partir la cadena de texto por sílabas, como para evitar partirla por sílabas. Es algo de locos.



Es complicado, mucho...

La parte compleja está en construir ese diccionario de sílabas

Complicado no, lo siguiente. Es que sinceramente, desde el primer momento no merece la pena ni intentarlo. Construir un diccionario/base de datos de palabras con sus sílabas marcadas/delimitadas necesitaría un esfuerzo casi inhumano, ¿y todo para qué?, si el algoritmo seguirá estando condenado a la imperfección y a una refactorización constante. En mi opinión creo que el usuario no se debería comer demasiado la cabeza preocupándose por ese aspecto en concreto. Tampoco ha explicado que motivos le llevan a querer partir por sílabas (o evitar partir por sílabas, como sea) y quizás si supieramos eso se le podría sugerir una solución adaptada a sus necesidades.

Pero si la intención del usuario realmente es partir una cadena de texto distinguiendo las silabas (del castellano), entonces veo bastante complejo perfeccionar un algoritmo (sin diccionario) hasta el punto que sea capaz de sacar las silabas correctas de palabras como salchicha, menstrual, pedigüeñería, pingüino, murciélago u oíamos (por decir algunas aleatorias, pero seguro que hay palabras con mucha mayor complejidad léxica-programática en el Castellano, jeje). Es algo inviable por tiempo y esfuerzo si no existe una motivación profesional y económica detrás de este proyecto.

Saludos!
« Última modificación: 10 Febrero 2017, 18:18 pm por Eleкtro » En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.348


Ver Perfil
Re: Division Silabas Texto
« Respuesta #4 en: 10 Febrero 2017, 18:30 pm »

Bla,bla,bla...
« Última modificación: 14 Diciembre 2020, 18:23 pm por Serapis » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Seperar en silabas
Programación Visual Basic
<[(x)]> 3 7,995 Último mensaje 8 Diciembre 2009, 06:45 am
por MCKSys Argentina
problema con busqueda de silabas ( letra mayuscula) « 1 2 »
Programación C/C++
manutmac 10 5,585 Último mensaje 14 Noviembre 2012, 16:09 pm
por rir3760
¿En ingles se puede separar las palabras en silabas?
Foro Libre
bacanzito 2 2,200 Último mensaje 6 Agosto 2014, 11:40 am
por ivancea96
MOVIDO: Division Silabas Texto
Programación General
Eleкtro 0 1,557 Último mensaje 10 Febrero 2017, 17:11 pm
por Eleкtro
Matches para palabras o silabas
Java
SrTrp 6 2,939 Último mensaje 10 Febrero 2019, 23:43 pm
por Serapis
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines