fbpx
Wikipedia

Nueva línea

En informática, nueva línea es un carácter especial, o secuencia de caracteres, que indica el final de una línea de texto y el paso a la siguiente. Se le llama así porque el carácter a la derecha del nueva línea aparecerá en la línea de debajo de los caracteres que había a la izquierda, por tanto en una línea nueva.

La codificación del carácter nueva línea no es la misma en todas las arquitecturas ni sistemas operativos, cosa que puede dar problemas cuando se intercambian datos entre ordenadores.

¿Terminador o separador?

Aún se discute si el carácter de nueva línea debería terminar o separar las líneas.

Si se usa como separador, un texto con las líneas A, B, y C quedaría grabado así (representando el carácter de nueva línea con \n):

A \n B \n C

Entonces, la última línea (C) no tiene el código de nueva línea al final. Este comportamiento está poco recomendado, y algunos programas tienen problemas procesando la última línea de un fichero si no acaba con una nueva línea, así que la convención general es tratar \n como terminador:

A \n B \n C \n

Este cambio puede afectar en el recuento de líneas de un fichero, pero no da problemas mayores.

Representaciones

Las aplicaciones y los sistemas operativos normalmente representan el carácter nueva línea con uno o con dos códigos de control:

  • Los sistemas EBCDIC, principalmente mainframes de IBM incluyendo a z/OS (OS/390), i5/OS (OS/400), usan NEL (siguiente línea) como carácter de nueva línea. EBCDIC también tiene caracteres llamados CR y LF, pero el valor numérico del LF es distinto al que se usa en ASCII. Otras variantes de EBCDIC también usan NEL pero con otro valor numérico asignado al carácter.
  • OpenVMS usa un sistema de ficheros basado en registros, y guarda los ficheros de texto con un registro por línea. Por tanto, no se almacena ningún terminador de línea, aunque el sistema puede añadir terminadores a cada línea de forma transparente cuando una aplicación accede a los datos.

Los valores numéricos usados normalmente son:

El CRLF no es más que uno detrás de otro, por tanto 0D 0A en hexadecimal.

Protocolos de red

Muchos protocolos de Internet son textuales, o sea, que envían líneas de texto para hacer las peticiones (además de usar código binario). Por eso, han de controlar cómo se tiene que marcar el final de cada línea.

Por tradición, la mayoría han funcionado usando el CRLF en el nivel de protocolo. Por ejemplo, HTTP, SMTP, FTP e IRC, entre otros. Sin embargo, algunos recomiendan que las aplicaciones también reconozcan un LF suelto.

En la práctica, hay muchas aplicaciones que acaban usando (incorrectamente) el código de nueva línea del lenguaje de programación C, que es \n pero tiene un valor que depende de la plataforma (ver sección N.l. en lenguajes de programación, más abajo).

Esto causa problemas al comunicarse con sistemas que siguen más firmemente el estándar. Por ejemplo, el agente de correo qmail no acepta mensajes de sistemas que envíen solo LF en vez del CRLF requerido. Detalles, en inglés.

Unicode

El estándar Unicode trata el problema definiendo un gran número de caracteres que las aplicaciones han de reconocer como terminadores de línea. Según [1]:

 LF:    Salto de línea, u000A
 CR:    Retorno de carro, u000D
 CR+LF: CR seguido por LF
 NEL:   Next Line, u0085
 FF:    Form Feed, u000C
 LS:    Line Separator, u2028
 PS:    Paragraph Separator, u2029

Parece demasiado complicado frente a otras posibles soluciones, como por ejemplo convertir todos los terminadores a un solo carácter como el LF, pero se ha hecho así para que la conversión pueda ser bidireccional.

Si transformamos un texto EBCDIC cambiando todos los NEL por LF, y luego lo queremos devolver a EBCDIC, no sabríamos si los LF de nuestra codificación corresponden a NEL o al propio LF de EBCDIC.

En Unicode, se puede hacer la transformación sin perder información, de forma que los programas siguen pudiendo reconocer todos los tipos posibles de terminadores de línea.

Historia

ASCII se desarrolló simultáneamente por el ISO y el ASA, la organización predecesora de ANSI. Durante el período 1963-1968, los borradores (preestándar) de ISO permitían usar tanto CRLF como LF para marcar una nueva línea, mientras que los borradores de ASA permitían solo CRLF.

El sistema operativo Multics empezó a desarrollarse en 1964 y usaba solo LF. Unix siguió la práctica de Multics, y sistemas posteriores siguieron a Unix.

La secuencia CR LF era común en los primeros ordenadores que tenían máquinas de teletipo (como el ASR33) como dispositivo de terminal. Esta secuencia era necesaria para posicionar el cabezal de la impresora al principio de una nueva línea. Como esta operación no se podía hacer en tiempo "1 carácter", había que dividirla en dos caracteres. A veces era necesario enviar CR LF NUL (siendo NUL el carácter de control que le manda "no hacer nada"), para asegurarse de que el cabezal de impresión parara de moverse. Después de que estos sistemas mecánicos desaparecieran, la secuencia CR LF dejó de tener sentido, pero aun así se ha seguido usando.

Se especula que QDOS (que Microsoft compró y renombró a MS-DOS) adoptó CRLF para copiar la implementación usada por CP/M. También se dice que CP/M eligió CR+LF para introducir una clara incompatibilidad con Unix, y así intentar evitar una posible denuncia de AT&T/Bell, que decía que CP/M violaba el copyright de Unix porque estaba basado en Unix (según esta teoría).

Otros creen que CP/M se parece más a los sistemas de DEC (como el RSTS/E) que a Unix. En cualquier caso, esta convención de QDOS pasó al siguiente sistema operativo comercializado por Microsoft, el Windows, y sigue igual en la actualidad (2006).

En lenguajes de programación

Para que sea más fácil crear programas portátiles, los lenguajes de programación ofrecen abstracciones para no tener que tratar con las pequeñas diferencias entre sistemas.

El lenguaje de programación C permite usar las secuencias de escape \n (nueva línea) y \r (retorno de carro). Sin embargo, éstas no son equivalentes a LF y CR en general. El estándar C solo garantiza dos cosas:

  1. Cada una de estas secuencias se traduce a un número que cabe en un solo valor char, y que depende de la implementación.
  2. Cuando se escribe a un fichero de tipo texto (en contraposición a un archivo binario), el \n se traduce de forma transparente al código de nueva línea nativo del sistema, que puede ser de más de un carácter. Cuando se lee en modo texto, la secuencia de nueva línea nativa se vuelve a traducir a \n. En modo binario no se hacen estas traducciones.

En las plataformas Unix, donde nació C, la secuencia que indica nueva línea es el código ASCII LF (0x0A), así que al principio se hizo que \n tuviera ese valor. Entonces, como la representación interna y la externa son idénticas, la traducción que hay que hacer en modo texto es nula, y modo texto y binario se comportan de la misma manera. Esto ha hecho que muchos programadores ignoren por completo la distinción, cosa que afecta al software desarrollado, que deja de ser portable.

Otro problema común es usar \n al comunicarse mediante un protocolo de red que requiere CRLF como terminador. En Windows funcionará, ya que \n se traduce a la representación nativa, que es precisament CR+LF, pero en Unix produce solo LF (la representación nativa del carácter nueva línea). Usar \r\n en modo binario es algo mejor, pero tampoco funciona en el caso general. Lo correcto es especificar los valores concretos, en modo binario; por ejemplo, \x0D\x0A

Perl y C++ ofrecen la misma interpretación de '\n' que C. C++ también tiene std::endl, que es la representación de una nueva línea en el sistema subyacente y vacía el stream después de emitirlo. Perl tiene un 'binmode' para las traducciones literales a la hora de leer y escribir en ficheros.

Java también proporciona las secuencias de escape \n y \r, que sí que garantizan que su valor será 0x0A y 0x0D respectivamente. Para que un programa hecho en Java se vea correctamente en el notepad, es necesario poner \r\n. Esto cobra vital importancia si se trata de comunicar nuestro programa en Java con un programa hecho en C mediando un archivo txt.

Las bibliotecas de entrada/salida de Java no traducen estas secuencias automáticamente, como en C. En cambio, ofrecen funciones para escribir una línea completa añadiendo el código nativo de nueva línea, y funciones para leer líneas que aceptan cualquier secuencia como terminador (CR, LF, CRLF).

Problemas comunes

Las diferentes representaciones de la nueva línea en los sistemas operativos a veces causan que al transferir un fichero entre dos ordenadores, se muestre incorrectamente. Por ejemplo, en condiciones normales, los ficheros creados en sistemas Unix o Apple Macintosh se verán como una línea larga en Windows. Y a la inversa: los ficheros creados en un ordenador con Windows se verán extraños con algunos editores, ya que el CR extra que Unix no necesita se mostrará como un ^M al final de cada línea.

El problema puede ser difícil de detectar si algunos programas manejan bien los terminadores de línea ajenos pero otros no. Por ejemplo, un compilador puede fallar con extraños mensajes de error aun cuando el fichero fuente se muestra correcto en la línea de comandos o un editor de texto.

Los navegadores web suelen poder trabajar con páginas codificadas en cualquier sistema, y los editores de texto modernos permiten no solo abrir ficheros de cualquier codificación, sino convertir entre ellas (ver siguiente sección).

Al transferir ficheros por FTP, el cliente puede convertir automáticamente entre diferentes codificaciones si está activado el modo de texto. Sin embargo, si se usa este modo para transferir un archivo binario, el fichero llegará corrupto. Los programas suelen usar heurísticos para detectar si un fichero es binario o no, pero pueden equivocarse.

Utilidades de conversión

En general, un editor de textos es el programa más conveniente para trabajar con ficheros que usan distintos terminadores de línea. La mayoría de editores modernos permiten cualquier combinación con los códigos de control ASCII CR y LF. Por desgracia, el editor predeterminado de Windows (Notepad) no lo permite, aunque Wordpad sí.

El programa de MS-DOS llamado EDIT también se puede usar para convertir un fichero que use los terminadores de línea de tipo Unix. Solo hay que abrir el archivo y volverlo a grabar.

En muchos sistemas Unix se encuentran las utilidades dos2unix y unix2dos, que transforman entre las codificaciones CRLF (DOS/Windows) y LF (Unix). Hay varias versiones de estos programas, con sintaxis algo distintas.

Se puede usar también el programa tr, que sí que está en cualquier sistema tipo Unix, y que permite hacer cualquier tipo de transformación de caracteres. Para pasar de DOS/Windows a Unix, eliminar todos los CR:

tr -d '\r' < fichero_entrada > fichero_salida 

Y en la otra dirección: se puede convertir de Unix a DOS con sed:

sed -e 's/$/\r/' fichero_entrada > fichero_salida 

En sistemas Unix está el comando file, que permite identificar el tipo de terminadores de línea que usa un fichero.

Véase también

  •   Datos: Q184914

nueva, línea, informática, nueva, línea, carácter, especial, secuencia, caracteres, indica, final, línea, texto, paso, siguiente, llama, así, porque, carácter, derecha, nueva, línea, aparecerá, línea, debajo, caracteres, había, izquierda, tanto, línea, nueva, . En informatica nueva linea es un caracter especial o secuencia de caracteres que indica el final de una linea de texto y el paso a la siguiente Se le llama asi porque el caracter a la derecha del nueva linea aparecera en la linea de debajo de los caracteres que habia a la izquierda por tanto en una linea nueva La codificacion del caracter nueva linea no es la misma en todas las arquitecturas ni sistemas operativos cosa que puede dar problemas cuando se intercambian datos entre ordenadores Indice 1 Terminador o separador 2 Representaciones 3 Protocolos de red 4 Unicode 5 Historia 6 En lenguajes de programacion 7 Problemas comunes 8 Utilidades de conversion 9 Vease tambien Terminador o separador EditarAun se discute si el caracter de nueva linea deberia terminar o separar las lineas Si se usa como separador un texto con las lineas A B y C quedaria grabado asi representando el caracter de nueva linea con n A n B n CEntonces la ultima linea C no tiene el codigo de nueva linea al final Este comportamiento esta poco recomendado y algunos programas tienen problemas procesando la ultima linea de un fichero si no acaba con una nueva linea asi que la convencion general es tratar n como terminador A n B n C nEste cambio puede afectar en el recuento de lineas de un fichero pero no da problemas mayores Representaciones EditarLas aplicaciones y los sistemas operativos normalmente representan el caracter nueva linea con uno o con dos codigos de control Los sistemas basados en ASCII o en una codificacion de caracteres compatible usan LF salto de linea CR retorno de carro o CRLF CR seguido de LF LF Unix y sistemas tipo Unix Linux AIX Xenix Mac OS X BeOS Amiga RISC OS y otros CR LF CP M MP M DOS Microsoft Windows CR familia Apple II y Mac OS hasta la version 9 LF CR Las antiguas maquinas de escribir por establecer la analogia con las computadoras Los sistemas EBCDIC principalmente mainframes de IBM incluyendo a z OS OS 390 i5 OS OS 400 usan NEL siguiente linea como caracter de nueva linea EBCDIC tambien tiene caracteres llamados CR y LF pero el valor numerico del LF es distinto al que se usa en ASCII Otras variantes de EBCDIC tambien usan NEL pero con otro valor numerico asignado al caracter OpenVMS usa un sistema de ficheros basado en registros y guarda los ficheros de texto con un registro por linea Por tanto no se almacena ningun terminador de linea aunque el sistema puede anadir terminadores a cada linea de forma transparente cuando una aplicacion accede a los datos Los valores numericos usados normalmente son a href Retorno de carro html title Retorno de carro CR a decimal 13 hexadecimal 0D a href Salto de l C3 ADnea html title Salto de linea LF a decimal 10 hexadecimal 0A NEL decimal 21 hexadecimal 15El a href CRLF html title CRLF CRLF a no es mas que uno detras de otro por tanto 0D 0A en hexadecimal Protocolos de red EditarMuchos protocolos de Internet son textuales o sea que envian lineas de texto para hacer las peticiones ademas de usar codigo binario Por eso han de controlar como se tiene que marcar el final de cada linea Por tradicion la mayoria han funcionado usando el CRLF en el nivel de protocolo Por ejemplo HTTP SMTP FTP e IRC entre otros Sin embargo algunos recomiendan que las aplicaciones tambien reconozcan un LF suelto En la practica hay muchas aplicaciones que acaban usando incorrectamente el codigo de nueva linea del lenguaje de programacion C que es n pero tiene un valor que depende de la plataforma ver seccion N l en lenguajes de programacion mas abajo Esto causa problemas al comunicarse con sistemas que siguen mas firmemente el estandar Por ejemplo el agente de correo qmail no acepta mensajes de sistemas que envien solo LF en vez del CRLF requerido Detalles en ingles Unicode EditarEl estandar Unicode trata el problema definiendo un gran numero de caracteres que las aplicaciones han de reconocer como terminadores de linea Segun 1 LF Salto de linea u000A CR Retorno de carro u000D CR LF CR seguido por LF NEL Next Line u0085 FF Form Feed u000C LS Line Separator u2028 PS Paragraph Separator u2029Parece demasiado complicado frente a otras posibles soluciones como por ejemplo convertir todos los terminadores a un solo caracter como el LF pero se ha hecho asi para que la conversion pueda ser bidireccional Si transformamos un texto EBCDIC cambiando todos los NEL por LF y luego lo queremos devolver a EBCDIC no sabriamos si los LF de nuestra codificacion corresponden a NEL o al propio LF de EBCDIC En Unicode se puede hacer la transformacion sin perder informacion de forma que los programas siguen pudiendo reconocer todos los tipos posibles de terminadores de linea Historia EditarASCII se desarrollo simultaneamente por el ISO y el ASA la organizacion predecesora de ANSI Durante el periodo 1963 1968 los borradores preestandar de ISO permitian usar tanto CRLF como LF para marcar una nueva linea mientras que los borradores de ASA permitian solo CRLF El sistema operativo Multics empezo a desarrollarse en 1964 y usaba solo LF Unix siguio la practica de Multics y sistemas posteriores siguieron a Unix La secuencia CR LF era comun en los primeros ordenadores que tenian maquinas de teletipo como el ASR33 como dispositivo de terminal Esta secuencia era necesaria para posicionar el cabezal de la impresora al principio de una nueva linea Como esta operacion no se podia hacer en tiempo 1 caracter habia que dividirla en dos caracteres A veces era necesario enviar CR LF NUL siendo NUL el caracter de control que le manda no hacer nada para asegurarse de que el cabezal de impresion parara de moverse Despues de que estos sistemas mecanicos desaparecieran la secuencia CR LF dejo de tener sentido pero aun asi se ha seguido usando Se especula que QDOS que Microsoft compro y renombro a MS DOS adopto CRLF para copiar la implementacion usada por CP M Tambien se dice que CP M eligio CR LF para introducir una clara incompatibilidad con Unix y asi intentar evitar una posible denuncia de AT amp T Bell que decia que CP M violaba el copyright de Unix porque estaba basado en Unix segun esta teoria Otros creen que CP M se parece mas a los sistemas de DEC como el RSTS E que a Unix En cualquier caso esta convencion de QDOS paso al siguiente sistema operativo comercializado por Microsoft el Windows y sigue igual en la actualidad 2006 En lenguajes de programacion EditarPara que sea mas facil crear programas portatiles los lenguajes de programacion ofrecen abstracciones para no tener que tratar con las pequenas diferencias entre sistemas El lenguaje de programacion C permite usar las secuencias de escape n nueva linea y r retorno de carro Sin embargo estas no son equivalentes a LF y CR en general El estandar C solo garantiza dos cosas Cada una de estas secuencias se traduce a un numero que cabe en un solo valor char y que depende de la implementacion Cuando se escribe a un fichero de tipo texto en contraposicion a un archivo binario el n se traduce de forma transparente al codigo de nueva linea nativo del sistema que puede ser de mas de un caracter Cuando se lee en modo texto la secuencia de nueva linea nativa se vuelve a traducir a n En modo binario no se hacen estas traducciones En las plataformas Unix donde nacio C la secuencia que indica nueva linea es el codigo ASCII LF 0x0A asi que al principio se hizo que n tuviera ese valor Entonces como la representacion interna y la externa son identicas la traduccion que hay que hacer en modo texto es nula y modo texto y binario se comportan de la misma manera Esto ha hecho que muchos programadores ignoren por completo la distincion cosa que afecta al software desarrollado que deja de ser portable Otro problema comun es usar n al comunicarse mediante un protocolo de red que requiere CRLF como terminador En Windows funcionara ya que n se traduce a la representacion nativa que es precisament CR LF pero en Unix produce solo LF la representacion nativa del caracter nueva linea Usar r n en modo binario es algo mejor pero tampoco funciona en el caso general Lo correcto es especificar los valores concretos en modo binario por ejemplo x0D x0APerl y C ofrecen la misma interpretacion de n que C C tambien tiene std endl que es la representacion de una nueva linea en el sistema subyacente y vacia el stream despues de emitirlo Perl tiene un binmode para las traducciones literales a la hora de leer y escribir en ficheros Java tambien proporciona las secuencias de escape n y r que si que garantizan que su valor sera 0x0A y 0x0D respectivamente Para que un programa hecho en Java se vea correctamente en el notepad es necesario poner r n Esto cobra vital importancia si se trata de comunicar nuestro programa en Java con un programa hecho en C mediando un archivo txt Las bibliotecas de entrada salida de Java no traducen estas secuencias automaticamente como en C En cambio ofrecen funciones para escribir una linea completa anadiendo el codigo nativo de nueva linea y funciones para leer lineas que aceptan cualquier secuencia como terminador CR LF CRLF Problemas comunes EditarLas diferentes representaciones de la nueva linea en los sistemas operativos a veces causan que al transferir un fichero entre dos ordenadores se muestre incorrectamente Por ejemplo en condiciones normales los ficheros creados en sistemas Unix o Apple Macintosh se veran como una linea larga en Windows Y a la inversa los ficheros creados en un ordenador con Windows se veran extranos con algunos editores ya que el CR extra que Unix no necesita se mostrara como un M al final de cada linea El problema puede ser dificil de detectar si algunos programas manejan bien los terminadores de linea ajenos pero otros no Por ejemplo un compilador puede fallar con extranos mensajes de error aun cuando el fichero fuente se muestra correcto en la linea de comandos o un editor de texto Los navegadores web suelen poder trabajar con paginas codificadas en cualquier sistema y los editores de texto modernos permiten no solo abrir ficheros de cualquier codificacion sino convertir entre ellas ver siguiente seccion Al transferir ficheros por FTP el cliente puede convertir automaticamente entre diferentes codificaciones si esta activado el modo de texto Sin embargo si se usa este modo para transferir un archivo binario el fichero llegara corrupto Los programas suelen usar heuristicos para detectar si un fichero es binario o no pero pueden equivocarse Utilidades de conversion EditarEn general un editor de textos es el programa mas conveniente para trabajar con ficheros que usan distintos terminadores de linea La mayoria de editores modernos permiten cualquier combinacion con los codigos de control ASCII CR y LF Por desgracia el editor predeterminado de Windows Notepad no lo permite aunque Wordpad si El programa de MS DOS llamado EDIT tambien se puede usar para convertir un fichero que use los terminadores de linea de tipo Unix Solo hay que abrir el archivo y volverlo a grabar En muchos sistemas Unix se encuentran las utilidades dos2unix y unix2dos que transforman entre las codificaciones CRLF DOS Windows y LF Unix Hay varias versiones de estos programas con sintaxis algo distintas Se puede usar tambien el programa tr que si que esta en cualquier sistema tipo Unix y que permite hacer cualquier tipo de transformacion de caracteres Para pasar de DOS Windows a Unix eliminar todos los CR tr d r lt fichero entrada gt fichero salida Y en la otra direccion se puede convertir de Unix a DOS con sed sed e s r fichero entrada gt fichero salida En sistemas Unix esta el comando file que permite identificar el tipo de terminadores de linea que usa un fichero Vease tambien EditarRetorno de carro Salto de linea CRLF Datos Q184914 Obtenido de https es wikipedia org w index php title Nueva linea amp oldid 137995838, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos