2010-09-15 13 views
9

Cuando escribo un archivo usando Delphi está en una máquina con Windows y los archivos de texto que publica funcionan bien en Windows. Cuando lo uso en una Mac, está esperando que el formato sea un poco diferente. En Mac, la nueva línea es diferente y no siempre puede leer los archivos de Windows.¿Cuál es la nueva línea universal para todos los sistemas operativos? (LF y CR)

¿Cómo puedo hacer que mis archivos sean legibles por programas mac?

+0

¿Ve el^M char cuando abre el archivo? Sólo curioso. Recuerdo haber leído algo sobre esto en "Classic Shell Scripting", creo. Tengo curiosidad sobre cuál será la respuesta. Perdón, no mucha ayuda. :-) Espero que tengas que escribir un script de shell que limpiará tus archivos de este personaje antes de abrirlos en el mac. – mledbetter

+0

¿Cuál es el destino en la Mac? es decir, ¿qué va a abrir el archivo que estás creando? – dawg

+0

@Mledbetter, si ves eso, generalmente significa que tres cosas son ciertas: Primero, estás viendo un archivo de texto de Mac viejo o de Windows. En segundo lugar, su editor está en Linux o en el nuevo modo Mac. Y tercero, su editor muestra caracteres de control con circunflejos seguidos de un carácter que no es de control. –

Respuesta

25
  • Para Windows, es CRLF
  • Para UNIX, es LF
  • Para MAC (hasta la versión 9) fue CR
  • Para MAC OS X, es LF

El hecho simple es que es diferente para todos los sistemas operativos. No hay una nueva línea "universal". Lo mejor que puedes hacer es ser consciente de las diferencias.

+4

El único hecho "nuevo" universal es que no existe LFCR. Se puede abusar de este hecho para poder procesar archivos de los 3 sistemas operativos: primero compruebe si es LF, de lo contrario, si es CR, compruebe si el siguiente carácter es LF. – slebetman

+0

Casi cierto, pero hay sistemas que no usan ninguna combinación de CR o LF para fines de línea.Ciertamente, hay sistemas que usan EBCDIC y otros conjuntos de caracteres no relacionados con ASCII. Incluso hay algunos sistemas, creo (¿alguien puede confirmarlo?) Que usan ASCII pero usan una estructura de datos más sofisticada para los archivos de texto que una simple secuencia de códigos de caracteres, por lo que no hay caracteres de final de línea. – Steve314

+1

+1 por mencionar que no hay una manera universal; Debería haber mencionado http://en.wikipedia.org/wiki/Newline ya que hay más de los 4 ejemplos que mencionó –

8

No existe una nueva línea universal para todos los sistemas operativos. Debe utilizar el avance de línea en algunos, el retorno de carro en otros y ambos en algunos otros.

La mayoría de los editores de texto pueden manejar múltiples tipos de terminaciones de línea: verifique su documentación. También hay muchas utilidades que pueden traducir los finales de línea para usted.

2

En lugar de "nueva línea universal", puede escribir un "formato universal" como JSON, XML, PDF, etc. dependiendo de si su salida está destinada a ser utilizada como datos para otro programa o documento de informe para ser leído por humanos.

4

En la unidad del sistema hay una variable global DefaultTextLineBreakStyle establecida en base al sistema operativo. Puede ser tlbsLF o tlbsCRLF. Si es tlbsLF, use # 10, si es tlbsCRLF use # 13 # 10.

De sistema:

type 
    TTextLineBreakStyle = (tlbsLF, tlbsCRLF); 

var { Text output line break handling. Default value for all text files } 
    DefaultTextLineBreakStyle: TTextLineBreakStyle = 
    {$IFDEF LINUX} tlbsLF {$ENDIF} 
    {$IFDEF MSWINDOWS} tlbsCRLF {$ENDIF} 
    {$IFDEF MACOS} tlbsLF {$ENDIF}; 

Me pregunto por qué es una var y no una const.

+2

También en la unidad del sistema hay una constante sLineBreak que se define como {$ IFDEF LINUX} # 10 {$ ENDIF} {$ IFDEF MSWINDOWS} # 13 # 10 {$ ENDIF}. –

+2

Es una variable para que pueda escribir un programa de Linux que procese archivos de texto de Windows, por ejemplo; simplemente asigne un nuevo valor a esa variable, y todo lo demás funciona normalmente. –

+0

Me parece razonable. –

Cuestiones relacionadas