• Jueves 21 de Noviembre de 2024, 16:57

Autor Tema:  Quitar un CR  (Leído 3509 veces)

Erturu

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Quitar un CR
« en: Miércoles 8 de Junio de 2022, 08:58 »
0
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);

explorer

  • Miembro activo
  • **
  • Mensajes: 69
    • Ver Perfil
Re:Quitar un CR
« Respuesta #1 en: Viernes 2 de Septiembre de 2022, 03:35 »
0
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.