SoloCodigo

Programación Web y Scripting => Perl => Mensaje iniciado por: Erturu en Miércoles 8 de Junio de 2022, 08:58

Título: Quitar un CR
Publicado por: Erturu en Miércoles 8 de Junio de 2022, 08:58
Buenos días. Tengo un problema a la hora de leer un fichero y quitar un CR como salto de linea, si utilizo un chomp o un chop() me pone todo en una linea menos la que quiero, ya que el resto de las lineas tiene un LF como salto de linea y no se como decirle que quiero que sea el CR, probe a que lo lea en hex y que quite el 0x0D, pero nada.

Alguna idea?

   my $FichR = $pathDestino."\\".$dsn;
   
    open(FICHERO, '<:encoding(UTF-8)', $FichR) or die "No se pudo abrir el $pathDestino./.$dsn";
    open(SALIDA, ">$pathDestino/.$dsn");
       while ($linea1 = <FICHERO>){
          chop $linea if substr($linea, -1) eq chr(0x0D);
          print SALIDA $linea1;
       }
       close (FICHERO);
       close (SALIDA);
Título: Re:Quitar un CR
Publicado por: explorer en Viernes 2 de Septiembre de 2022, 03:35
Una posibilidad sería usar una expresión regular:

Código: [Seleccionar]
$linea =~ s/\x0D$//; # quitar el CR final, si está
El \x0D representa el código de carácter 13, en formato hexadecimal.
El ancla "$" indica que queremos buscar hacia el final de la cadena. O sea: el CR debe estar al final de la cadena, y sólo en esa posición.

Si el patrón de búsqueda coincide, el operador de sustitución s/// realiza el cambio del CR por... nada. O sea, lo quita.