• Publicidad

Cómo eliminar los fines de línea de una cadena

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Cómo eliminar los fines de línea de una cadena

Notapor charlygarcia » 2009-10-10 07:13 @342

Hola a todos.

Gracias a toda la comunidad de perlenespanol pues aquí he aprendido y seguiré aprendiendo mucho.

Resulta que le he dado a mis usuarios un formulario para que ingresen datos y los datos enviados por mis usuarios los agrego a un archivo de tipo texto de la siguiente manera:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$FILE="datosoct.txt";
open(archivconf,">>".$FILE);  
$linea=$id."::".$campo1."::".$campo2."::\n";
print archivconf ($linea);
close(archivconf);
 
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


pero los contenidos de la variable $campo1 vienen de un textarea por lo cual el usuario puede entrar una descripción de varias líneas, y cuando reviso el archivo "datosoct.txt" encuentro a veces las líneas terminadas en los fines de línea (\n) ingresados por los usuarios en el textarea asociada a $campo1.

Mi pregunta es: ¿cómo podría yo, antes de armar la línea $linea, que voy a ingresar al archivo, eliminarle esos retornos de carro al campo $campo1?

Muchas gracias por la colaboración.
[text]¿Cómo lograr que no se seque una gota de agua? Arrojándola al mar. [/text] - Nota: Este tag no se puede utilizar en firmas.Samsara
Avatar de Usuario
charlygarcia
Perlero nuevo
Perlero nuevo
 
Mensajes: 54
Registrado: 2009-03-06 23:16 @011

Publicidad

Re: como eliminar el fin de linea de una cadena ?

Notapor explorer » 2009-10-10 07:21 @348

Podría ser así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$campo1 =~ s/[\n\r]//g;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Actualización: agregar '\r' a lo que se quita.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: como eliminar el fin de linea de una cadena ?

Notapor charlygarcia » 2009-10-10 07:34 @357

¡uy!

Muy rápida la respuesta, ¡¡¡muchísimas gracias!!!, lo probaré.
Última edición por explorer el 2009-10-10 10:23 @474, editado 1 vez en total
Razón: Ortografía
[text]¿Cómo lograr que no se seque una gota de agua? Arrojándola al mar. [/text] - Nota: Este tag no se puede utilizar en firmas.Samsara
Avatar de Usuario
charlygarcia
Perlero nuevo
Perlero nuevo
 
Mensajes: 54
Registrado: 2009-03-06 23:16 @011

Re: Cómo eliminar los fines de línea de una cadena

Notapor mbarria » 2009-10-19 08:41 @403

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $FILE="datosoct.txt";
  2. open(archivconf,">>".$FILE);  
  3. chop($linea); #creo que te servirá también
  4. $linea=$id."::".$campo1."::".$campo2."::\n";
  5. print archivconf ($linea);
  6. close(archivconf);
  7.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4



¡Saludos!
mbarria
Perlero nuevo
Perlero nuevo
 
Mensajes: 1
Registrado: 2009-10-19 08:11 @382

Re: Cómo eliminar los fines de línea de una cadena

Notapor explorer » 2009-10-19 10:05 @461

Bienvenido a los foros de Perl en Español, mbarria.

El problema de chop() es que elimina, de forma indubitativa, el último carácter de cada línea. Sea cual sea.

En el caso que cuenta charlygarcia, que los finales de línea son solo un carácter "\n", entonces sí que puede valer, salvo la última línea, que quizás no lo tenga. En ese caso, chop() se carga el último carácter, algo que no debía de hacer.

Es mejor usar entonces el chomp().

Otro detalle que me he dado cuenta: tanto las soluciones con chop(), con chomp() o la de expresión regular, tienen un fallo: la eliminación de los finales de línea provoca la unión de líneas de un mismo párrafo.

Una mejor solución es la de hacer un filtrado más drástico: quitar toda secuencia de uno o más caracteres espacio, por un solo espacio:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$campo1 =~ s/\s+/ /g;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


De esta manera,
* Las secuencias de dos o más caracteres espacio quedan reducidos a uno solo.
* Los finales de línea, que también son capturados por '\s', son cambiados por un carácter, por lo que, ademas de eliminarlos, unimos las líneas con un espacio en blanco.

Problemas:
* No se respetará el formato de párrafos creado por el usuario
* Si el usuario usa el textarea para enviar algo más que texto no formateado, se perderá el formateo (tablas, listas de opciones, etc.).

No es un asunto sencillo, pero tal como lo ha planteado charly, de forma fácil, pues igual de fácil se debería resolver.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 21 invitados

cron