Saltos de Línea
Hay varias formas diferentes de implementar saltos de línea en archivos de texto plano. En este artículo nos gustaría observar primero estos diferentes tipos de saltos de línea y luego abordar los problemas que pueden surgir debido a esta variabilidad, además de brindar soluciones y algunos ejemplos de aplicación para estos problemas.
- Tipos de Salto de Línea basados en Caracteres
- Saltos de Línea mediante la Definición de una Longitud de Línea Fija
- Saltos de Línea en Código Fuente HTML y otros Lenguajes de Marcado
- Saltos de Línea en el Código Fuente de Lenguajes de Programación
- Detección del Tipo de Salto de Línea de Archivos
- Problemas con el Intercambio de Archivos
- Cómo cambiar el Tipo de Salto de Línea de Archivos
- Archivos con Saltos de Línea Mixtos
Básicamente, existen tres categorías diferentes en las que podemos clasificar los distintos tipos de saltos de línea: saltos de línea basados en caracteres, saltos de línea mediante la definición de una longitud de línea fija, así como saltos de línea implementados mediante un lenguaje de marcado. En las siguientes secciones, primero nos gustaría comparar estas tres categorías y sus representantes más destacados a modo de introducción al tema.
Tipos de Salto de Línea basados en Caracteres
La mayoría de los archivos de texto plano utilizan ciertos caracteres respectivamente bytes previamente definidos para marcar sus saltos de línea. Si el programa que debe leer, procesar o mostrar dicho archivo de texto conoce estos caracteres, sabe que estos caracteres no deben mostrarse como letras, sino que pueden interpretarse como saltos de línea (invisibles).
Este enfoque sería fácil de implementar si se hubiera acordado a lo largo del tiempo un único carácter específico para un salto de línea. Sin embargo, debido a que los distintos sistemas han crecido históricamente, este todavía no es el caso hoy. Entonces, dependiendo del sistema operativo, se pueden usar otros caracteres o bytes para un salto de línea.
Caracteres y Puntos de Código para Saltos de Línea y su Uso
La siguiente tabla proporciona una descripción general de los diferentes caracteres y combinaciones de caracteres para saltos de línea y los sistemas más comunes que utilizan cada tipo de salto de línea:
Abreviación | Código (Hex/Dec) | Juego de Caracteres | Sistema/Uso |
CR LF | 0D 0A / 13 10 | ASCII | Windows, MS-DOS, OS/2, Symbian OS, Palm OS, Atari TOS, CP/M, MP/M, RT-11, Amstrad CPC, DEC TOPS-10 así como la mayoría de los primeros sistemas operativos que no son Unix ni IBM |
LF | 0A / 10 | ASCII | Line Feed / Avance de Línea - Unix y sistemas similares a Unix (Linux, macOS, Mac OS X, Android, BSD, AIX, Xenix y así sucesivamente), Amiga, AmigaOS, QNX, Multics, BeOS, RISC OS y otros sistemas orientados al estándar POSIX |
CR | 0D / 13 | ASCII | Carriage Return / Retorno de Carro - Mac OS (Classic) hasta la versión 9, Apple II, Lisa OS, Commodore 64 (C64), Commodore 128 (C128), Acorn BBC, ZX Spectrum, TRS-80, Oberon, HP Series 80, MIT Lisp Machine, OS-9 |
RS | 1E / 30 | ASCII | Record Separator / Separador de Registros - QNX (antes de la implementación de POSIX con la versión 4) |
EOL | 9B / 155 | ATASCII | End Of Line - Atari 8-Bit Computer |
NL | 15 / 21 | EBCDIC | New Line - IBM Mainframe Systems tal como z/OS (OS/390) or IBM i (i5/OS, OS/400) |
LF | 25 / 37 | EBCDIC | Line Feed - Carácter EBCDIC para 0A de ASCII |
RNL | 06 / 06 | EBCDIC | Require New Line (desde 2007) |
76 / 118 | ZX80/ZX81 | Sinclair Research Home Computers Linebreak | |
VT | U+000B | Unicode | Vertical Tab / Pestaña Vertical |
FF | U+000C | Unicode | Form Feed / Avance de Página |
NEL | U+0085 | Unicode | Next Line / Proxima Linea |
LS | U+2028 | Unicode | Line Separator / Separador de Linea |
PS | U+2029 | Unicode | Paragraph Separator / Separador de Párrafos |
El juego de caracteres más extendido y utilizado en todo el mundo es el ASCII (American Standard Code for Information Interchange), respectivamente el estándar Unicode basado en ASCII. Los dos tipos de salto de línea más comunes y extendidos también provienen de este juego de caracteres: el salto de línea LF de Unix y el salto de línea CR LF de Windows.
Unix y el macOS actual de Apple utilizan el punto de código Unicode U+000D como salto de línea, mientras que los sistemas Apple más antiguos utilizan U+000A. Windows y MS-DOS utilizan ambos caracteres uno tras otro en el orden 0D0A. Además de estos tres caracteres y secuencias de caracteres, el estándar Unicode también requiere los puntos de código U+000B (Vertical Tab VT, pestaña vertical), U+000C (Form Feed FF, avance de página/salto de página = página nueva), U+0085 (Next Line NEL, siguiente línea), U+2028 (Line Separator LS, separador de línea) y U+2029 (Paragraph Separator PS, separador de párrafo) interpretarse como un salto de línea. Sin embargo, hasta la fecha sólo unos pocos programas hacen esto.
Uno de los conjuntos de caracteres más conocidos fuera del mundo ASCII es el conjunto de caracteres de 8 bits EBCDIC (Extended Binary Coded Decimal Interchange Code) desarrollado por IBM para sus computadoras centrales (IBM Mainframe Systems). Este juego de caracteres utiliza el carácter hexadecimal 15 (decimal 21) para un salto de línea, que combina las funciones de CR y LF. Además, EBCDIC también contiene los caracteres típicos de ASCII CR y LF (aunque este último con un código de carácter diferente) y, desde 2007, el carácter adicional RNL (Required New Line - Nueva línea requerida), que se puede utilizar para codificar un salto de línea automático condicional.
Menos comunes o solo de relevancia histórica son los saltos de línea EOL (End Of Line) utilizados en las computadoras Atari de 8 bits (utilizadas principalmente en la década de 1980) del juego de caracteres de 8 bits ATASCII (ATARI Standard Code for Information Interchange) utilizado por Atari, los saltos de línea de los juegos de caracteres ZX80 y ZX81 utilizados por Sinclair Research Ltd para sus computadoras también en la década de 1980, así como el salto de línea RS (Record Separator), que fue utilizado por el sistema operativo QNX hasta el lanzamiento de la versión 4.0 en 1990. Algunos sistemas operativos históricos incluso definieron nuevas líneas a nivel de bits: por ejemplo, los sistemas operativos de la serie CDC 6000 de la década de 1960, en una época en la que la memoria era costosa, definían sus saltos de línea como dos o más caracteres de 6 bits llenos de cero bits al final de una word de 60 bits.
¿Por qué el Salto de Línea de Windows consta de dos Caracteres?
El hecho de que Windows, MS-DOS y la mayoría de los primeros sistemas operativos que no son Unix ni IBM, a diferencia de los otros sistemas operativos mencionados, definan sus saltos de línea con dos caracteres tiene razones históricas y se remonta al procedimiento de máquinas de escribir y aparatos de impresión antiguos:
En una máquina de escribir, la ruptura de una línea también se realiza mediante dos acciones que se pueden distinguir entre sí: por un lado, la posición de escritura retrocede al principio de la línea (retorno de carro) y, por otro lado, la posición de escritura baja una línea, por ejemplo, empujando más el papel a imprimir girando el rodillo (avance de línea). Según esta lógica, un "salto de línea" completo se compone de una combinación de estas dos acciones. Cuando en los años 1960 se desarrollaron los sistemas de juegos de caracteres para ordenadores, en estos conjuntos de caracteres se definieron caracteres de control separados para el retorno de carro y para el avance de línea, con el fin de poder mapear e implementar el control de las impresoras en ese momento en de la misma manera. Esta historia todavía se refleja en las versiones más recientes de Windows.
El retorno de carro (en inglés "Carriage Return" = CR) recibió el código decimal 13 (hexadecimal 0D) en el juego de caracteres ASCII de la época y se abrevia como "CR", el avance de línea (en inglés "Line Feed" = LF) recibió el código decimal 10 (hexadecimal 0A) y se abrevia "LF". Ambos caracteres todavía se pueden encontrar hoy en el estándar Unicode actual bajo los mismos puntos de código numérico.
Algunos sistemas también utilizaron la distinción entre CR y LF para varios efectos de texto. Si solo se usara CR sin LF para el control de la impresora, se podría lograr un retorno de carro sin avance de línea. De esta forma, la posición de escritura podría llegar al principio de una línea ya impresa y así sobreimprimir el texto existente con otros caracteres. Por ejemplo, de esta forma el texto podría subrayarse, tacharse o escribirse en negrita. De esta manera también se hicieron posibles caracteres diacríticos fuera del juego de caracteres realmente utilizado mediante la sobreimpresión y combinación de diferentes caracteres. De manera similar, se puede utilizar el carácter de control RI (Reverse Line Feed = avance de línea inverso) definido con el punto de código U+008D en el estándar Unicode.
Unicode, ASCII, EBCDIC, Entidades HTML y Secuencias de Escape
Como vimos en la sección anterior, además de muchas similitudes, también existen ciertas diferencias entre los conjuntos de caracteres individuales. Por este motivo, nos gustaría volver a comparar los caracteres relevantes en la siguiente tabla:
Carácter | Unicode Code Point | ASCII | EBCDIC | Entidad HTML | Secuencia de Escape | |||
CR | U+000D | 0D | 13 | 0D | 13 | 
 | | \r |
LF | U+000A | 0A | 10 | 25 | 37 | 
 | | \n |
CR LF | - | 0D 0A | 13 10 | 0D 25 | 13 37 | - | - | \r\n |
NEL/NL | U+0085 | - | 15 | 21 | … | … | \u0085 | |
VT | U+000B | 0B | 11 | 0B | 11 |  |  | \v |
FF | U+000C | 0C | 12 | 0C | 12 |  |  | \f |
LS | U+2028 | - | - | 
 | 
 | \u2028 | ||
PS | U+2029 | - | - | 
 | 
 | \u2029 |
Dado que el estándar Unicode ha adoptado completamente todos los caracteres del juego de caracteres ASCII con puntos de código idénticos como su bloque "Basic Latin" (Latín básico) por razones de compatibilidad, todos los caracteres para saltos de línea del juego de caracteres ASCII, como el avance de línea LF, el retorno de carro CR, la pestaña vertical VT y el avance de página FF se definen tanto en el juego de caracteres ASCII como como puntos de código Unicode con el mismo número.
Además, el estándar Unicode define los puntos de código U+0085, U+2028 y U+2029 como saltos de línea adicionales que no forman parte del juego de caracteres ASCII. Para distinguirlos de estos saltos de línea reales están los puntos de código Unicode U+2424 (Symbol for Newline, Símbolo de nueva línea), U+23CE (Return Symbol, Símbolo de retorno), U+240D (Symbol for Carriage Return, Símbolo de retorno de carro), así como U+240A (Symbol for Line Feed, Símbolo de avance de línea). Aunque esos caracteres no generan un salto de línea por sí mismos, se pueden utilizar para crear glifos que sean visibles para el usuario con el fin de visualizar los caracteres de salto de línea que de otro modo serían invisibles.
El juego de caracteres EBCDIC, que se utiliza principalmente en sistemas mainframe IBM, también tiene muchos paralelos con ASCII. Aunque el salto de línea estándar de EBCDIC es el carácter NEL (código hexadecimal 15 / código decimal 21), que a su vez no tiene equivalente ASCII, EBCDIC también define puntos de código para los caracteres CR, LF, VT y FF. De estos cuatro caracteres, sólo LF está definido bajo un punto de código diferente de ASCII en EBCDIC (25/37 en lugar de 0A/10).
El carácter Unicode equivalente a EBCDIC-NL es NEL (Next Line, Siguiente línea) y tiene el punto de código Unicode U+0085. Este carácter se ha definido en el estándar Unicode además de CR y LF para permitir la conversión bidireccional desde y hacia todas las demás codificaciones. Si solo tuviéramos los caracteres CR y LF disponibles en el estándar Unicode, esto no sería posible: por ejemplo, si quisiéramos convertir un texto EBCDIC a Unicode y viceversa, en este caso primero podríamos convertir todos los saltos de línea NEL a ya sea LF o CR LF. Sin embargo, al volver a convertir nos encontraríamos con una ambigüedad, ya que EBCDIC distingue entre CR, LF y NL y, por lo tanto, ya no estaría claro si nuestros caracteres LF y CR ya eran antes LF y CR (y, por lo tanto, deberían mantenerse) o eran originalmente un NL (que tendría que volver a convertirse). Entonces, solo porque los tres caracteres diferentes CR, LF y NEL también están disponibles en el estándar Unicode, la transformación es posible sin pérdida de información.
Además, las dos últimas columnas de la tabla muestran las entidades HTML así como las secuencias de escape de los caracteres individuales. Las entidades HTML se pueden utilizar para insertar los caracteres respectivos en el texto fuente HTML. La tabla muestra las entidades HTML en notación hexadecimal y decimal. Estas dos variantes conducen al mismo resultado y, por tanto, pueden utilizarse indistintamente. Para el carácter LF, también la entidad HTML 
 puede ser usado. Del mismo modo, también las secuencias de escape de la última columna son comodines para los caracteres mencionados. Las secuencias de escape se pueden utilizar, por ejemplo, en expresiones regulares o en algunos lenguajes de programación como alias para insertar los caracteres de salto de línea correspondientes. Más sobre esto en la sección sobre saltos de línea en el código del programas.
Las codificaciones 8-Bit basadas en ASCII, como las páginas de códigos de Windows o los juegos de caracteres Latin, no aparecen en la tabla, ya que estos juegos de caracteres también han adoptado todos los caracteres ASCII y, por lo tanto, corresponden a la columna "ASCII" de la tabla.
En aras de la exhaustividad, también cabe mencionar que además del estándar Unicode común y más utilizado, que adoptó sus primeros puntos de código del juego de caracteres ASCII, también existe un estándar Unicode alternativo llamado UTF-EBCDIC, que en cambio, se basa ampliamente en el juego de caracteres EBCDIC.
Representaciones de Bytes en diferentes Codificaciones
Dependiendo de la codificación utilizada, los puntos de código Unicode mencionados generan diferentes bytes dentro de un archivo almacenado. La siguiente tabla ofrece una visión general de las secuencias de bytes de los distintos tipos de saltos de línea en las codificaciones ASCII, UTF-7, UTF-8, UTF-16 Litte Endian y Big Endian, así como UTF-32 Litte Endian y Big Endian:
Carácter | Unicode Code Point | ASCII | UTF‑7 | UTF‑8 | UTF‑16 LE | UTF‑16 BE | UTF‑32 LE | UTF‑32 BE |
CR | U+000D | 0D | 0D | OD | 0D 00 | 00 0D | 0D 00 00 00 | 00 00 00 0D |
LF | U+000A | 0A | 0A | 0A | 0A 00 | 00 0A | 0A 00 00 00 | 00 00 00 0A |
CR LF | - | 0D 0A | 0D 0A | 0D 0A | 0D 00 0A 00 | 00 0D 00 0A | 0D 00 00 00 0A 00 00 00 | 00 00 00 0D 00 00 00 0A |
NEL/NL | U+0085 | - | 2B 41 49 55 | C2 85 | 85 00 | 00 85 | 85 00 00 00 | 00 00 00 85 |
VT | U+000B | 0B | 2B 41 41 73 | 0B | 0B 00 | 00 0B | 0B 00 00 00 | 00 00 00 0B |
FF | U+000C | 0C | 2B 41 41 77 | 0C | 0C 00 | 00 0C | 0C 00 00 00 | 00 00 00 0C |
LS | U+2028 | - | 2B 49 43 67 | E2 80 A8 | 28 20 | 20 28 | 28 20 00 00 | 00 00 20 28 |
PS | U+2029 | - | 2B 49 43 6B | E2 80 A9 | 29 20 | 20 29 | 29 20 00 00 | 00 00 20 29 |
Las codificaciones típicas de 8 bits basadas en ASCII, como las páginas de códigos de Windows o los juegos de caracteres Latin, no se enumeran por separado en la tabla. Estas codificaciones utilizan los mismos bytes que ASCII, que se pueden encontrar en la columna ASCII. Muchas otras páginas de códigos ANSI y juegos de caracteres también siguen esta convención.
Las representaciones de bytes enumeradas en esta tabla son, entre otras cosas, importantes para la detección del tipo de salto de línea de archivos, que abordaremos en la sección sobre reconocimiento del tipo de salto de línea de un archivo.
Caracteres de Salto de Línea como Separadores o Terminadores de Línea
Los caracteres de salto de línea se pueden interpretar de dos maneras diferentes, las cuales tienen sus defensores y aplicaciones: un carácter de salto de línea puede considerarse como un separador entre dos líneas o como un marcador para el final de una línea.
Para demostrar esta diferencia, veamos el siguiente ejemplo, donde "N" representa el carácter de salto de línea:
abcNdefN
El contenido de dicho archivo podría interpretarse de dos maneras diferentes:
- Si interpretamos el carácter de salto de línea como un separador entre dos líneas, nuestro ejemplo tendría tres líneas: la primera línea con el contenido "abc", la segunda línea con el contenido "def", seguida de una tercera línea que está vacía.
- Sin embargo, si interpretamos el carácter de salto de línea como un terminador de línea, solo obtendríamos dos líneas: la primera línea con el contenido "abc" y "N" como marcador para el final de la línea, así como la segunda línea con el contenido "def" y nuevamente "N" como terminador.
Hay programas que consideran los caracteres de nueva línea como separadores y otros programas que interpretan los caracteres de nueva línea como terminadores. Los problemas que resultan de esto son obvios: los programas que consideran el carácter de salto de línea como un separador pueden interpretar demasiado una línea (vacía); los programas que consideran el carácter de salto de línea como un marcador de fin de línea pueden tener problemas para leer la última línea de un archivo.
Entrada de Caracteres de Salto de Línea
El salto de línea del sistema suele ser más fácil de ingresar usando la tecla Enter. Se produce una excepción si la entrada se realiza dentro de un editor que comprende otros tipos de salto de línea y en el que actualmente se está trabajando en un archivo con un tipo de salto de línea que no es del sistema o la configuración de este editor (u otro programa) está configurada en otro tipo de salto de línea correspondiente.
Ingresar los otros tipos de salto de línea es un poco más difícil: algunos sistemas y editores de texto permiten el método abreviado de teclado CTRL + J para ingresar el carácter LF. Otras combinaciones de teclas comunes son CTRL + M para CR y CTRL + K para VT (esta es también la razón por la que a veces se muestra ^M para CR). Si interpretamos CR y LF como un retorno de carro y un avance de línea, podemos hacerlo usando las teclas Pos1 y Flecha abajo.
Dentro del código fuente HTML, los caracteres de salto de línea también se pueden insertar a través de sus entidades HTML, que se enumeran en la tabla que se puede encontrar en la sección "Unicode, ASCII, EBCDIC, Entidades HTML y Secuencias de Escape". Además, podemos ingresar los caracteres usando el atajo de teclado ALT + Punto de código del carácter usando el teclado numérico del teclado y en algunos contextos, como en expresiones regulares o en muchos lenguajes de programación, también podemos usar las secuencias de escape de los caracteres, que también son enumerados en la tabla mencionada para cada uno de los caracteres. Más sobre esto último en el apartado sobre saltos de línea en el código fuente de los lenguajes de programación.
Saltos de Línea mediante la Definición de una Longitud de Línea Fija
A diferencia de los tipos de salto de línea basados en definiciones de caracteres específicos que se introdujeron en la última sección, los archivos de texto con una longitud de línea fija no requieren la definición de uno o más caracteres para un salto de línea. En cambio, cada línea de dicho archivo se basa en una longitud de línea que inicialmente se puede seleccionar libremente, pero que se mantiene constante en todo el archivo. En el archivo se escriben simplemente todas las líneas una tras otra y, si es necesario, se llevan a la longitud deseada mediante un carácter de relleno adecuado.
El contenido de un archivo de este tipo (aquí, como ejemplo, con una longitud de línea fija de cuatro caracteres) puede tener el siguiente aspecto:
ABCDABC ABCD
Un programa que conoce la longitud de línea utilizada para el archivo y puede mostrarla, puede interpretar este contenido de la siguiente manera:
ABCD
ABC
ABCD
Dado que la segunda línea solo contiene tres caracteres, aquí utilizamos un espacio como carácter de relleno. Si no hubiéramos hecho eso, la "A" de la tercera línea se habría movido al final de la segunda línea.
Distribución y Áreas de Aplicación
Los archivos con una longitud de línea fija son significativamente menos comunes que los archivos que implementan sus saltos de línea con un carácter de salto definido. La principal razón en contra del uso de una longitud de línea fija es la falta de flexibilidad. Al fin y al cabo, muy pocos textos tienen el mismo número de caracteres en cada línea.
No obstante, existen algunas aplicaciones útiles para dichos archivos, por ejemplo en el caso de datos CSV u otros conjuntos de datos cuyos valores en cada línea tienen la misma longitud, por lo que los caracteres adicionales para los saltos de línea no agregarían más información a la interpretación de dichos archivos, de modo que estos caracteres puedan omitirse en consecuencia (especialmente en aplicaciones o entornos donde es necesario ahorrar memoria).
Longitud de Línea Fija como Salto de Línea del Sistema
La longitud de línea fija sólo se utilizó como salto de línea del sistema en algunas de las primeras computadoras centrales. En aquella época, en estos sistemas eran habituales líneas de longitud fija de 72 u 80 caracteres. Este número se inspiró en las tarjetas perforadas utilizadas anteriormente, que también incluían normalmente 80 columnas por tarjeta, de las cuales las columnas 73 a 80 se usaban a menudo para números de secuencia. Algunos de estos sistemas codificaban líneas de más de 80 caracteres colocando un carácter de carro como # como primer carácter al comienzo de la siguiente línea a vincular.
Los sistemas de archivos basados en records, como los utilizados por los sistemas operativos OpenVMS, RSX-11 o varias computadoras centrales más nuevas, tampoco requieren un carácter de salto de línea. Estos sistemas almacenan archivos de texto como un record/registro por línea. Cada uno de estos registros contiene un campo de longitud al principio de la línea en el que se almacena individualmente la longitud de la línea respectiva. Esto significa que no es necesario ningún delimitador de línea adicional en forma de un carácter de control, ya que el programa de lectura ya sabe a partir de esta información después de cuántos caracteres termina la línea o cuántos caracteres deben leerse para leer una línea. Incluso si el almacenamiento de esta manera no requiere un carácter de salto de línea, los sistemas de gestión de registros utilizados generalmente pueden pasar las líneas solicitadas a un programa solicitante con un carácter separador de línea si es necesario.
Saltos de Línea en Código Fuente HTML y otros Lenguajes de Marcado
Además de los tipos de salto de línea basados en caracteres y los saltos de línea definidos por una longitud de línea fija, que analizamos en las dos últimas secciones, existe otra forma de implementar saltos de línea utilizando un lenguaje de marcado.
Saltos de Línea en Código Fuente HTML
Uno de los representantes más conocidos de los lenguajes de marcado es el código fuente HTML basado en XML, la base de las páginas de Internet tal como las conocemos hoy. La implementación de saltos de línea en el código fuente HTML y en otros lenguajes de marcado similares es especial porque los saltos de línea pueden ocurrir en dos niveles diferentes: El texto fuente en sí puede contener cualquier salto de línea basado en caracteres, como CRLF o LF, pero ellos permanecen ocultos porque la visualización final de los saltos de línea en el sitio web que luego es visible en el navegador se basa únicamente en las etiquetas HTML basadas en texto y otros formatos, como las hojas de estilo CSS.
Para ilustrar esto, nos gustaría ver dos fuentes HTML como ejemplo. Por un lado, hay el siguiente código fuente HTML:
<h1>Título</h1><p>Primer Párrafo</p><p>Segundo<br>Párrafo</p>
Por otro lado, está este código fuente:
<h1>Título</h1>
<p>Primer Párrafo</p>
<p>Segundo<br>
Párrafo</p>
Como podemos ver, el primer ejemplo no contiene ningún salto de línea "visible", mientras que en el segundo ejemplo hay un salto de línea después de cada párrafo significativo y dentro del segundo párrafo. Sin embargo, ambos códigos fuente conducen a la misma visualización en el navegador. Los llamados espacios en blanco (whitespace), como espacios adicionales, tabulaciones o incluso saltos de línea, no desempeñan ningún papel en la interpretación del texto fuente.
Lo único que es importa en este código fuente es que hemos puesto un texto en una etiqueta h1 ("título 1" del inglés "heading") y otros dos textos en una etiqueta p (párrafo del inglés "paragraph"). De forma predeterminada (también puede anular este comportamiento), estas etiquetas se interpretan para insertar un salto de línea en forma de un párrafo después de ellas. Lo mismo se aplica a etiquetas como h2 (título 2), h3 (título 3), li (elementos de lista) o el clásico salto de línea HTML br (salto simple del inglés "break"), que utilizamos para envolver el segundo párrafo. Otras etiquetas, como las etiquetas de formato como b (bold / negrita) o i (italic / cursiva), no insertan saltos automáticos en la visualización.
Los saltos de línea clásicos en el texto fuente que no se basan en etiquetas, por el contrario, se pueden utilizar independientemente de la visualización en el navegador, por ejemplo para estructurar el texto fuente y hacerlo más legible. Estos saltos de línea, que luego son invisibles en el navegador, se pueden utilizar en forma de saltos de línea basados en caracteres o, por ejemplo, se pueden insertar a través de las llamadas entidades HTML, que se enumeran en la sección sobre entidades HTML.
Anular el Comportamiento con la Etiqueta pre
Este comportamiento de saltos de línea basados en caracteres invisibles en el texto fuente se puede anular utilizando la etiqueta HTML "pre", así como el atributo de estilo CSS "white-space:pre". Los saltos de línea y otros espacios en blanco (whitespace), como espacios en el texto fuente, que se encuentran dentro de una etiqueta pre o dentro de etiquetas con la propiedad CSS "white-space" con el valor "pre" se muestran como tales en el navegador:
<pre>Línea 1
Línea 2</pre>
<span style="white-space: pre">Línea 3
Línea 4</span>
Este texto fuente crea cuatro líneas rompersas en el navegador a pesar de que los saltos de línea solo se escribieron en el texto fuente utilizando "whitespace" invisibles. El salto de línea entre la primera y la segunda línea se crea mediante la etiqueta pre, el salto de línea entre la tercera y la cuarta línea se crea mediante la propiedad CSS del elemento span circundante.
Saltos de Línea en LaTeX, Markdown, RTF, Creole, PostScript, BBCode y AsciiDoc
Otros lenguajes de marcado comunes incluyen LaTeX, Markdown, RTF, Creole y PostScript, cada uno de los cuales usa una sintaxis diferente para marcar saltos de línea:
- TeX / LaTeX nos ofrece tres formas de marcar un salto de línea: con dos barras "\\", con "\newline" o con "\hfill \break".
- Markdown convierte líneas en blanco en párrafos y dos o más espacios al final de una línea en un salto de línea.
- En el formato RTF (Rich Text Format), los párrafos se pueden insertar con "\par" (de "paragraph", párrafo) y saltos de línea simples con "\line".
- Creole usa "\\linebreak" para marcar saltos de línea.
- En el lenguaje de descripción de páginas PostScript, las cosas son un poco diferentes: aquí, para generar texto en una nueva línea, tenemos que usar el comando "moveto" para movernos a la posición de salida deseada antes de especificar el texto (en el caso de un salto de línea, es decir, a la ubicación de nuestra página en la que debe comenzar la nueva línea).
Por otro lado, en lenguajes de marcado como BBCode o AsciiDoc, a pesar de la posibilidad de otros marcados (como "[b]palabra[/b]" o "*palabra*" para texto en negrita), los saltos de línea del texto fuente también se incluyen en el resultado. Entonces, en estos lenguajes de marcado, el salto de línea basado en caracteres se usa como marcado en sí (lo que es similar a Markdown).
Requisitos para utilizar Lenguajes de Marcado
El requisito previo para utilizar lenguajes de marcado como HTML, TeX/LateX, Markdown, RTF, Creole, PostScript, BBCode o AsciiDoc es, por supuesto, conocer los marcados, comandos y etiquetas utilizados. Sin saber cómo se pretende utilizar o interpretar un marcado específico, no es posible una representación.
Saltos de Línea en el Código Fuente de Lenguajes de Programación
En el código fuente de la programación también nos enfrentamos - al igual que en el texto fuente HTML - al problema de quedebemos distinguir entre el código fuente en sí y lo que realmente muestra en el programa ejecutado y eventualmente compilado. Es importante gestionar el acto de equilibrio entre un código que sea lo más legible posible para los humanos, pero que no tenga un impacto negativo en el programa.
Como en HTML, este acto de equilibrio se resolvió nuevamente por el hecho de que muchos lenguajes de programación hacen una distinción estricta entre los saltos de línea en el código fuente y los saltos de línea que el programa genera posteriormente: Dependiendo del sistema operativo, generalmente se pueden utilizar los habituales saltos de línea basados en caracteres en el código fuente, mientras que para aquellos en el programa existe un lenguaje de marcado para generar saltos de línea, que puede diferir de un lenguaje de programación a otro. Algunos ejemplos de esto se enumeran en la siguiente tabla:
Lenguaje | Salto de Línea Explícito | Salto de Línea del Sistema |
C | char s[] = "-\r\x0A-"; | char s[] = "\n"; |
C++ | std::string s = "-\r\x0A-"; | std::string s = "\n"; |
C# | string s = "-\r\n-"; | string s = Environment.NewLine; |
Java | String s = "-\r\n-"; | String s = System.lineSeparator(); String s = "-%n-"; |
JavaScript / TypeScript | var s = "-\n-"; | |
Delphi | var s: string; s := '-' + #13#10 + '-'; | var s: string; s := sLineBreak; |
Lazarus / FreePascal | var s: string; s := '-' + #13#10 + '-'; | var s: string; s := LineEnding; |
PHP | $s = "-\r\n-"; | $s = PHP_EOL; |
Python | s = "-\r\n-" | s = os.linesep |
Perl | my $s = "-\r\x0A-"; | my $s = "\n"; |
Haskell | "-\CR\LF-" :: [Char] | "\n" :: [Char] |
Visual Basic | Dim s1 As String = "-" & vbCrLf & "-"; Dim s2 As String = "-" & vbCr & "-"; Dim s3 As String = "-" & vbLf & "-"; | Dim s1 As String = System.Environment.NewLine; Dim s2 As String = vbNewLine; (deprecated) |
SQL | UPDATE tab SET col = '-' + CHAR(13) + CHAR(10) + '-'; |
Como muestra la tabla, en la mayoría de los lenguajes de programación podemos utilizar dos enfoques diferentes para insertar un salto de línea:
- O definimos nuestro salto de línea explícitamente usando sus caracteres, es decir, estamos firmemente comprometidos con un tipo de salto de línea específico (cada uno de los ejemplos muestra dos líneas con el contenido "-" usando el salto de línea de Windows \r\n respectivamente 0D 0A, 13 10 o \CR\LF - podemos crear un salto de línea de Unix de la misma manera omitiendo \r, 0D, 13 o \CR y escribiendo solo \n, 0A, 10 o \LF),
- o definimos nuestro salto de línea independiente de la plataforma usando ciertas variables, constantes o funciones que el lenguaje de programación respectivo pone a nuestra disposición. La ventaja de esto último es que no tenemos que preocuparnos por el sistema en el que se ejecuta nuestro programa, ya que de esta manera obtenemos automáticamente el tipo de salto de línea del sistema apropiado (si así lo queremos).
En las dos secciones siguientes nos gustaría entrar en más detalles sobre ambas variantes y sus trampas.
Salto de Línea Explícito
En muchos lenguajes de programación como C, C++, C#, Java, PHP, Python, Perl o Haskell, las secuencias de escape como \r y \n introducidas en la sección "Tipos de salto de línea basados en caracteres" se pueden utilizar para insertar un salto de línea en una cadena / string. Básicamente, \r representa un retorno de carro (CR, U+000D) y \n un avance de línea (LF, U+000A), lo que permite generar saltos de línea para los diferentes sistemas.
Dependiendo del lenguaje de programación se deben tener en cuenta los siguientes aspectos y particularidades al utilizar \r y \n:
- En algunos lenguajes de programación como PHP y Perl, podemos definir cadenas usando comillas simples ('texto') así como comillas dobles ("texto"). Sin embargo, las secuencias de escape como \r y \n sólo se reemplazan automáticamente si aparecen entre comillas dobles en estos idiomas. Entonces "-\r\n-" crearía un salto de línea entre los dos caracteres "-" y "-" mientras que '-\r\n-' mantendría los caracteres como tales. En otros lenguajes de programación como JavaScript, TypeScript y Python, no importa si usamos comillas simples o dobles. JavaScript y Python interpretan '\n' y "\n" como una nueva línea. Sin embargo, en C, C++, C#, Java y Haskell esta pregunta ni siquiera surge: en estos lenguajes de programación sólo se utilizan comillas dobles para las strings, mientras que las comillas simples se reservan para los chars.
- Aunque JavaScript y TypeScript entienden tanto \r como \n, debemos tener cuidado al usar estos dos caracteres juntos: incluso en computadoras con Windows, una alerta ("-\r\n-") no produce solo una sino dos nuevas líneas. El JavaScript independiente de la plataforma (así como TypeScript) interpreta tanto \r como \n como su propio salto de línea único. Para crear solo un salto de línea, deberíamos usar \n, por ejemplo como alert("-\n-"). Sin embargo, el texto en estos idiomas ciertamente puede contener la variante \r\n. Esto debe tenerse en cuenta, por ejemplo, al procesar la entrada del usuario procedente de un ordenador Windows. Además, los saltos LS y PS se aceptan como saltos de línea en la entrada de JavaScript, pero no NEL, que se interpreta como un espacio. Además, debemos tener en cuenta que si queremos generar HTML con nuestro código JavaScript o TypeScript, lo que importa no son los saltos de línea basados en caracteres \r o \n, sino las etiquetas HTML adecuadas, que hemos descrito en el apartado sobre saltos de línea en HTML.
- Java distingue entre \r, \n y %n. %n representa el salto de línea del sistema independientemente de la plataforma (es decir, \r\n si el programa se ejecuta en Windows, \n si el programa se ejecuta en Unix, Linux, macOS, etc.), mientras que \n representa explícitamente el carácter U+000A (que es exclusivamente el salto de línea LF de Unix) y \r representa explícitamente el carácter U+000D (CR). readLine() de Java acepta CR, LF y CRLF como saltos de línea. Sin embargo, al leer texto EBCDIC, el carácter EBCDIC NL no se asigna a NEL (U+0085) sino a LF (U+000A).
- En C, C++, Perl y Haskell, \r y \n no siempre representan automáticamente exactamente los caracteres CR (U+000D) y LF (U+000A). Eso depende del modo utilizado: si se abre o escribe un archivo, esto se puede hacer en modo texto o en modo binario. En modo binario, \r y \n se comportan como se esperaba. Por otro lado, en modo texto (basado en el estándar C), la secuencia de escape \n por sí sola representa un salto de línea completo del sistema. Esto significa que simplemente usar \n en modo texto en Windows da como resultado un salto de línea CRLF completo, por lo que \n por sí solo produce la salida realmente esperada de \r\n. Si usamos \r\n en su lugar, esto daría como resultado una salida de CRCRLF en Windows, duplicando así CR (\r se convierte en el primer CR, luego \n se convierte en el segundo CR y LF). En sistemas Unix, sin embargo, \r\n daría como resultado el CRLF de salida, ya que una nueva línea completa de Unix consta sólo del carácter LF. Por esta razón, los ejemplos para C, C++, Perl y Haskell usan explícitamente \x0A o \CR en lugar de \n, aunque \n funcionaría e imprimiría el carácter 0A (LF) en todos los casos en Unix y también en modo binario en Windows. Lo complicado es que este problema sólo se manifiesta cuando se ejecuta un programa en Windows. Si se desarrolla y prueba en un sistema Unix, el problema no existe y, por lo tanto, no se puede detectar.
- Sin embargo, en PHP, Python, C# y Java se garantiza que \r siempre representa U+000D y \n siempre representa U+000A, respectivamente, y que \r\n siempre corresponde al salto de línea CRLF de Windows. No existe ninguna conversión automática en estos idiomas.
La situación es algo diferente en Delphi, Lazarus, Visual Basic y SQL. En lugar de las secuencias de escape \r y \n, en Visual Basic podemos usar las constantes vbCr y VbLf para los caracteres CR y LF. También existe la constante vbCrLf para el salto de línea de Windows respectivamente para ambos caracteres juntos. En Delphi, FreePascal y Lazarus podemos insertar los caracteres directamente mediante sus códigos de caracteres #13 (CR) y #10 (LF). La situación es similar en el lenguaje de base de datos SQL, donde podemos usar de manera similar CHAR(13) y CHAR(10) para generar los caracteres correspondientes.
Variables, Constantes y Funciones para el Salto de Línea del Sistema
Además de esta definición explícita de los saltos de línea, la mayoría de las lenguajes de programación también nos proporcionan variables, constantes o funciones con las que se puede insertar el respectivo salto de línea del sistema independientemente de la plataforma:
- Un ejemplo de esto es la constante "LineEnding" en Lazarus y Free Pascal ("sLineBreak" es el equivalente en Delphi). Dependiendo del sistema en el que compilamos nuestro programa, esta constante contiene el salto de línea apropiado. Entonces, si compilamos nuestro programa para Windows, "LineEnding" contiene los caracteres CR y LF (es decir, el salto de línea de Windows). Sin embargo, si compilamos nuestro programa para macOS o Linux, "LineEnding" contiene el salto de línea LF de Unix utilizado en macOS y Linux. Entonces, Lazarus nos da la opción de escribir #13#10 para un salto de línea fijo o de permanecer variable con "LineEnding".
- Conceptos similares también existen en otros lenguajes de programación. Por ejemplo, PHP nos proporciona la constante PHP_EOL para el mismo propósito, mientras que en Visual Basic la constante se llama vbNewLine.
- Como se explicó con más detalle en la última sección, en los lenguajes de programación C, C++, Perl y Haskell podemos usar la secuencia de escape /n para el salto de línea del sistema, que en la mayoría de los demás lenguajes solo representa el carácter LF.
- Otros lenguajes nos proporcionan funciones para obtener el salto de línea del sistema: En Python, por ejemplo, esto se puede hacer con os.linesep, en C# podemos usar Environment.NewLine para el mismo propósito.
- Algunos lenguajes incluso nos brindan varias opciones: Por ejemplo, en Java podemos insertar el salto de línea del sistema con la secuencia de escape %n (en lugar de \n) o podemos usar la función System.lineSeparator(). La situación es similar con Visual Basic, donde tenemos vbNewLine y System.Environment.NewLine (sin embargo, vbNewLine ahora ha sido marcado como deprecated y ya no debería usarse).
- JavaScript, TypeScript y SQL, por el contrario, no tienen un concepto nativo para determinar el salto de línea del sistema debido a su optimización para la usabilidad independiente de la plataforma.
De esta manera, podemos decidir por nosotros mismos si queremos usar explícitamente un tipo de salto de línea específico (por ejemplo, porque nuestro objetivo es guardar archivos exactamente con este tipo de salto de línea) o si nuestro programa debe usar automáticamente el salto de línea apropiado del sistema (por ejemplo porque nuestro programa debería producir un resultado apropiado en diferentes sistemas).
Protocolos de Red
El uso del tipo de salto de línea correcto también juega un papel importante en los protocolos de red. Muchos de estos protocolos de red, como HTTP, SMTP, FTP e IRC, están basados en texto y utilizan el tipo de salto de línea CRLF para sus solicitudes transmitidas línea por línea.
Algunos programas se adhieren estrictamente a este estándar y, en consecuencia, se niegan a procesar solicitudes que utilizan un tipo de salto de línea diferente, como LF (como qmail). Otros programas son más tolerantes en su procesamiento o incluso utilizan incorrectamente siempre el tipo de salto de línea del sistema para sus solicitudes, lo que puede provocar problemas en la comunicación con sistemas que implementan el estándar de manera más estricta. Algunos de estos problemas también surgen del uso del \n típico de C que, como vimos en la sección anterior, puede resolverse como el CRLF correcto o como el LF incorrecto en lenguajes de programación como C, C++, Perl y Haskell, según sobre el sistema operativo y el modo.
Para evitar estos problemas, algunos protocolos recomiendan ahora también reconocer tipos de salto de línea distintos de CRLF. Sin embargo, con el uso continuado de CRLF todavía estamos en el lado correcto, ya que no sabemos qué programa posiblemente desactualizado se esté utilizando en el otro lado.
Detección del Tipo de Salto de Línea de Archivos
A diferencia de la codificación de archivos de texto, cuyo "ID de codificación" podemos escribir para determinadas codificaciones Unicode como marca de identificación en forma de la llamada marca de orden de bytes (Byte Order Mark, BOM) al principio de un archivo de texto, no es así de fácil al intentar reconocer el tipo de salto de línea de un archivo texto. Para el tipo de salto de línea utilizado en un archivo, no hay nada comparable que pueda indicarnos el tipo de salto de línea utilizado de forma similar a la BOM. Por lo tanto, cuando tenemos un archivo de texto desconocido frente a nosotros, lo único que nos queda son algunas reglas generales para determinar el tipo de salto de línea de este archivo.
Una primera indicación la proporciona el sistema operativo en el que se creó el archivo de texto: si el archivo se originó en una computadora con Windows, es probable que aparezca el salto de línea CR LF de Windows. Sin embargo, si el archivo se creó en una Mac reciente o en Linux, probablemente utilice el salto de línea LF de tipo Unix. Sin embargo, este tipo de clasificación puede ser, en el mejor de los casos, una regla general, ya que, por ejemplo, existen suficientes editores de texto para Windows que pueden tener preestablecido el salto de línea de Windows en su configuración predeterminada, pero con los que también es posible crear archivos que utilizan cualquier otro tipo de salto de línea. Además, es posible que no esté del todo claro de qué sistema procede realmente un archivo.
Por esta razón, al interpretar un archivo de texto de origen desconocido, no debemos confiar en tales conjeturas sino intentar tomar una decisión basada en los bytes del archivo que conocemos. Por ejemplo, podemos proceder de la siguiente manera:
- Contar los saltos de línea: En un primer paso, debemos revisar los bytes respectivamente los puntos de código de los caracteres del archivo y luego ver qué tipo de salto de línea podría ajustarse al perfil que determinamos usando este enfoque. Por ejemplo, si nuestro archivo contiene muchos puntos de código de tipo $0A (LF) pero ni un solo punto de código de tipo $0D (CR), lo más probable es que sea un archivo de texto con el tipo de salto de línea Unix LF. Por otro lado, si $0D y $0A ocurren exactamente la misma cantidad de veces y también en una combinación tal que cada $0D va seguido de un $0A, entonces lo más probable es que tengamos un archivo con el tipo de salto de línea CRLF de Windows. Podemos proceder de la misma manera para cualquiera de los otros tipos de salto de línea en cuestión (para obtener una tabla resumen de posibles secuencias de bytes, consulte la sección sobre representaciones de bytes de caracteres de salto de línea en diferentes codificaciones).
- No encontrar: Si no encontramos un solo carácter en nuestro archivo, que podría aparecer en un salto de línea o que podría indicar el uso de un determinado tipo de salto de línea, esto podría deberse a dos razones. O nuestro archivo no contiene ningún salto de línea, sino que solo consta de una sola línea o es un archivo que utiliza la longitud de línea fija como delimitador de línea. Si se aplica el segundo caso, podemos intentar adivinar una posible longitud de línea fija en función de la estructura del archivo (por ejemplo, a través de patrones recurrentes), pero sin información sobre qué longitud de línea fija se eligió para el archivo, se vuelve muy difícil. También debido a la baja prevalencia de archivos de texto con longitudes de línea fijas, en caso de duda en tal caso debemos recurrir al salto de línea preferido del sistema en el que abrimos el archivo (para editarlo posteriormente).
- Conteo ambiguo: Puede surgir otro problema si nuestro conteo no arroja un resultado claro. Por ejemplo, nuestro archivo podría contener los caracteres CR y LF, pero no del mismo número. Esto significa que nuestro archivo no se puede clasificar claramente como un archivo de texto de Windows (para ello tendría que haber el mismo número de caracteres CR y LF en el archivo), ni se puede asignar claramente el archivo al salto de línea CR o LF (para esto, el otro tipo no debería aparecer en el archivo). Cubrimos este caso especial en la sección "Archivos con saltos de línea mixtos" de este artículo.
Afortunadamente, sólo tendremos que hacer el trabajo aquí descrito si queremos programar nosotros mismos una aplicación que pueda manejar todo tipo de archivos de texto. Un programa que ya puede hacer esto es el TextConverter: De forma predeterminada, el TextConverter trabaja con la opción "Tipo de Salto de Línea" > "Detección Automática", lo que significa que el TextConverter realiza automáticamente el análisis de sus archivos como se describe aquí y usted no noto nada al respecto. Sin embargo, con el TextConverter también es posible cambiar esta configuración predeterminada y leer o guardar archivos con cualquier otro tipo de salto de línea. Con el TextConverter, todos los tipos de salto de línea presentados en este artículo se pueden usar de la misma manera como una longitud de línea fija o como caracteres o puntos de código definidos por el usuario como un salto de línea.
Problemas con el Intercambio de Archivos
Las diferentes codificaciones para los saltos de línea pueden causar serios problemas al intercambiar archivos entre diferentes sistemas.
Los problemas pueden ser de muy diversos tipos:
- Por ejemplo, un archivo creado en Linux de repente parece no tener saltos de línea en Windows, porque Windows espera un carácter más para un salto de línea completo que el que Linux escribió en el archivo: por lo tanto, el archivo completo se muestra como una sola línea larga. La situación es similar cuando intentamos utilizar un editor de texto de Windows para abrir un archivo creado en un Mac u otro sistema Unix (que no puede soportar este tipo de saltos de línea).
- Al revés, los archivos de texto creados en Windows pueden causar que todos los saltos de línea se dupliquen en los sistemas Unix, ya que algunos editores de Unix interpretan tanto CR como LF como un único salto de línea propio, aunque estos dos caracteres se consideran juntos como un salto de línea en Windows. Algunos editores también muestran el salto de línea adicional como ^M o <cr> al final de cada línea. El problema de los saltos de línea dobles también se facilita en los sistemas macOS por razones históricas: dado que el sistema predecesor Mac OS Classic hasta la versión 9 utilizaba el carácter CR en lugar del actual LF como separador de líneas, muchos programas macOS modernos todavía interpretan no solo LF pero también el carácter CR como un salto de línea completo.
- Si utilizamos archivos con una longitud de línea fija, por un lado, tenemos que informar al destinatario sobre el número de caracteres por línea y, por otro lado, tenemos que asegurarnos de que nuestro destinatario pueda abrir el archivo, ya que muy pocos programas admiten archivos de texto con una longitud de línea fija.
- Las cosas también pueden complicarse cuando se trata de archivos que utilizan uno de los tipos de salto de línea menos comunes, como VT, FF, NEL, LS o PS. Por ejemplo, el editor de texto predeterminado de Windows, "Bloc de Notas", no reconoció ninguno de estos tipos de salto de línea hasta Windows 11 y le gustaba interpretar NEL como un carácter de puntos suspensivos (…) según el punto de código 85 de la página de códigos de Windows del mismo número. Solo con Windows 11 (o también con la actualización 1803 para Windows 10) se revisó el Bloc de Notas y ahora reconoce todos estos tipos de saltos de línea excepto NEL. Antes de este cambio, el Bloc de Notas ni siquiera reconocía el salto de línea LF, muy extendido pero que no pertenece al sistema. El editor de texto predeterminado de Linux del entorno de escritorio GNOME (Ubuntu, Fedora, Debian, Suse) "gedit" al menos reconoce LS y PS, pero no VT, FF y NEL. Sólo el editor de texto predeterminado "TextEdit" de macOS reconoce correctamente, además de los tipos de salto de línea CR, LF y CRLF utilizados con más frecuencia, también todos los caracteres de salto de línea adicionales VT, FF, NEL, LS y PS requeridos por el estándar Unicode.
- Con tipos de salto de línea históricos como RS, EOL o Sinclair, ni siquiera podemos esperar que un editor de texto normal reconozca los archivos por sí solo sin configuraciones adicionales.
- Si un archivo de texto de otro sistema no está destinado simplemente a visualizarse en un editor de texto, sino que se utiliza, por ejemplo, como archivo de configuración o como registro de datos, puede ocurrir que el programa en cuestión ni siquiera reconozca el archivo o lo interprete incorrectamente. Además, estos errores a veces se manifiestan tarde o los programas afectados emiten mensajes de error difíciles de interpretar.
- Para empeorar las cosas, la forma en que los programas tratan los tipos de saltos de línea externos puede variar ampliamente. Algunos programas, como los navegadores, que naturalmente tienen que procesar archivos de texto de cualquier sistema como tal vez ninguna otra clase de programa, ya que para un sitio web no está del todo claro en qué sistema se creó el código fuente subyacente, normalmente aceptan cada uno de los caracteres mencionados como una salto de línea. Otros programas pueden ser muy estrictos y aceptar sólo un carácter específico. Entre estos dos extremos son concebibles todos los matices.
Para que sin embargo dichos archivos sean legibles en el sistema de su elección, hay dos opciones: o simplemente usamos un programa que también comprende tipos de saltos de línea exóticos, o cambiamos el carácter del salto de línea en estos archivos antes de verlos o editarlos más. Veremos cómo funciona esto en la siguiente sección.
Cómo cambiar el Tipo de Salto de Línea de Archivos
Si desea leer archivos de texto de otros sistemas operativos u otras fuentes que utilizan un tipo de salto de línea diferente al de su sistema operativo de forma nativa en su sistema, puede reescribir los saltos de línea de los archivos en cuestión y reemplazar los saltos de línea anteriores con el tipo de salto de línea que prefiera. Esta reescritura también puede ser necesaria si desea leer sus archivos de texto con un programa que sólo entiende un cierto tipo de salto de línea y no puede realizar la conversión necesaria por sí mismo.
Cambiar el Tipo de Salto de Línea con el TextEncoder
Independientemente del motivo por el que desee cambiar el tipo de salto de línea de los archivos, puede realizar este cambio fácilmente, incluso con cualquier número de archivos al mismo tiempo, utilizando el software TextEncoder. Para hacer esto, simplemente siga los pasos a continuación:
- Primero, arrastre todos los archivos cuyo tipo de salto de línea desea cambiar al TextEncoder. Alternativamente, también puede abrir los archivos individualmente o buscar archivos en carpetas enteras utilizando filtros arbitrarios.
- En el lado derecho de la ventana principal, en "Cambios" > "Saltos de Línea", seleccione el tipo de salto de línea de destino que desee en "Guardar como", por ejemplo, "CRLF - Windows" o "LF - Unix".
- Opcional: En "Leer como", opcionalmente puede especificar qué tipo de salto de línea se debe utilizar para leer los archivos. De forma predeterminada, se utiliza la opción "Detección Automática", que debería ser suficiente en la mayoría de los casos. Sin embargo, para tipos de saltos de línea más exóticos, como saltos de línea definidos por una longitud de línea fija o saltos de línea basados en puntos de código definidos por el usuario, debe realizar la selección correspondiente aquí.
- En la parte inferior derecha de la ventana principal encontrará las Opciones de Almacenamiento. Aquí usted decide si desea sobrescribir el archivo original respectivo o si desea almacenar los archivos convertidos como archivos nuevos, por ejemplo en una carpeta nueva.
- Finalmente, debe hacer clic en el botón "Convertir y Guardar" debajo de las opciones de almacenamiento. Esto cambiará el salto de línea de todos los archivos actualmente en la lista de archivos del programa de acuerdo con su configuración actual.
El TextEncoder admite todos los tipos de saltos de línea basados en caracteres presentados en este tutorial, así como saltos de línea después de un número fijo de caracteres, tanto para leer como para guardar los archivos de texto. Además, también puede definir y utilizar saltos de línea personalizados mediante uno o varios caracteres o puntos de código.
Si desea automatizar el cambio de salto de línea de uno o más archivos (por ejemplo, todos los archivos de una carpeta específica) mediante un script, puede utilizar el TextEncoder en su versión TextEncoder Pro CL.
Cambiar el Tipo de Salto de Línea con el TextConverter
También con la aplicación Text Converter es posible cambiar los saltos de línea utilizados en los archivos de texto. El procedimiento es el mismo que se acaba de describir para el TextEncoder. Además, también el surtido de tipos de salto de línea admitidos es idéntica a la de TextEncoder.
Sin embargo, las opciones de salto de línea en el TextConverter no se encuentran en "Cambios > Saltos de Línea" sino en "Acciones > Archivos > Tipo de Salto de Línea". Además, también puede utilizar el TextConverter para muchas otras manipulaciones de los archivos texto plano, CSV y XML, mientras que el TextEncoder solo está diseñado para cambiar la codificación y el tipo de salto de línea de archivos de texto. El Text Converter también está disponible en una versión por lotes, que puede controlarse y automatizarse mediante la línea de comandos o mediante un script.
Archivos con Saltos de Línea Mixtos
En la sección "Detección del tipo de salto de línea de un archivo" ya habíamos comentado el caso de que pueda haber archivos de texto que puedan contener varios tipos de saltos de línea al mismo tiempo. Entonces, ninguno de los posibles tipos de salto de línea podrá asignarse de forma clara y unívoca a dicho archivo.
Aparición de Archivos con Saltos de Línea Mixtos
Estos archivos con saltos de línea mezclados pueden aparecer de varias maneras:
Es posible, por ejemplo, que un archivo haya sido editado por diferentes personas en diferentes sistemas. Por ejemplo, si estas personas utilizan un editor de texto que solo puede comprender y escribir su propio tipo de salto de línea del sistema, puede suceder rápidamente lo siguiente: la persona A crea un archivo de texto en Linux. En este punto, el archivo resultante sólo contiene el tipo de salto de línea Unix LF. Luego, la persona B abre el archivo en Windows y comienza a agregar algunos párrafos. Estos nuevos párrafos se escriben en el archivo utilizando el salto de línea CR LF de Windows, pero los saltos de línea LF antiguos permanecen intactos. Un archivo de este tipo contiene involuntariamente varios tipos de saltos de línea.
Lo mismo puede suceder si se adjuntan varios archivos de diferentes sistemas sin armonizar primero el tipo de salto de línea de los archivos.
Reparación de Archivos con Saltos de Línea Mixtos
Pero ¿qué podemos hacer cuando ya es demasiado tarde? ¿Cómo podemos arreglar un archivo de este tipo con saltos de línea mixtos? Afortunadamente, no tenemos que hacer esto manualmente ya que podemos usar nuevamente el TextEncoder, que ya se presentó en la última sección. Cómo funciona esto exactamente se explica en el tutorial "Cómo reparar Archivos de Texto con Saltos de Línea mixtos".
Y que la próxima vez no vuelva a terminar con archivos con saltos de línea mixtos: el programa TextConverter puede unir varios archivos de texto, teniendo en cuenta sus diferentes tipos de saltos de línea. Y por supuesto sin que tenga que preocuparte explícitamente por ello.