2010-09-15 6 views
9

Quando scrivo un file usando Delphi è su una macchina Windows e i file di testo che mette fuori funzionano bene su Windows. Quando lo uso su un Mac, però, mi aspetto che la formattazione sia un po 'diversa. Su Mac la nuova riga è diversa e non può sempre leggere i file di Windows.Qual è la newline universale per tutti i sistemi operativi? (LF e CR)

Come posso rendere i miei file leggibili dai programmi mac?

+0

Stai vedendo il carattere^M quando apri il file? Solo curioso. Ricordo di aver letto qualcosa su questo in "Classic Shell Scripting", penso. Sono curioso di sapere quale sarà la risposta. Mi dispiace non molto aiuto. :-) Mi aspetto che tu debba scrivere uno script di shell che pulirà i tuoi file di questo personaggio prima di aprirli sul mac. – mledbetter

+0

Qual è la destinazione su Mac? cioè, cosa sta per aprire il file che stai creando? – dawg

+0

@Mledbetter, se lo vedete, di solito significa che tre cose sono vere: in primo luogo, state visualizzando un file di testo Windows o vecchio Mac. In secondo luogo, il tuo editor è in Linux o in una nuova modalità Mac. E in terzo luogo, il tuo editor visualizza i caratteri di controllo con circonflussi seguiti da un carattere non di controllo. –

risposta

25
  • Per Windows, è CRLF
  • Per UNIX, è LF
  • Per MAC (fino alla versione 9) era CR
  • Per MAC OS X, è LF

Il semplice fatto è che è diverso per tutti i sistemi operativi. Non esiste una nuova riga "universale". Il meglio che puoi fare è essere consapevoli delle differenze.

+4

L'unico fatto newline "universale" è che non esiste una cosa come LFCR. Questo fatto può essere sfruttato per essere in grado di elaborare file da tutti e 3 i sistemi operativi: prima controlla se è LF altrimenti se è CR verifica se il carattere successivo è LF. – slebetman

+0

Quasi vero - ma ci sono sistemi che non utilizzano alcuna combinazione di CR o LF per le estremità della linea.Certamente ci sono sistemi che usano EBCDIC e altri set di caratteri non legati all'ASCII. Ci sono anche alcuni sistemi, credo (forse qualcuno può confermare?), Che usano ASCII ma usano una struttura dati più sofisticata per i file di testo rispetto a una semplice sequenza di codici carattere, quindi non ci sono caratteri di fine riga. – Steve314

+1

+1 per menzionare che non esiste un modo universale; dovresti aver menzionato http://en.wikipedia.org/wiki/Newline perché ci sono più di 4 esempi di quelli che hai citato –

8

Non esiste una nuova riga universale per tutti i sistemi operativi. È necessario utilizzare l'avanzamento riga su alcuni, il ritorno a capo su altri e entrambi su altri.

La maggior parte degli editor di testo è in grado di gestire diversi tipi di terminazioni di linea: controllare la documentazione. Ci sono anche molte utility che possono tradurre i finali di linea per te.

2

Invece di "ritorno a capo universale" si potrebbe scrivere un "formato universale", come JSON, XML, ecc PDF a seconda se l'output è destinato ad essere usato come i dati per un altro programma o un documento di rapporto per essere letto da esseri umani.

4

Nell'unità di sistema è presente una variabile globale DefaultTextLineBreakStyle impostata in base al sistema operativo. Può essere tlbsLF o tlbsCRLF. Se è tlbsLF, utilizzare # 10, se è tlbsCRLF usare # 13 # 10.

Da 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}; 

Mi chiedo solo perché è una var e non const.

+2

Anche nell'unità di sistema è presente una costante sLineBreak definita come {$ IFDEF LINUX} # 10 {$ ENDIF} {$ IFDEF MSWINDOWS} # 13 # 10 {$ ENDIF}. –

+2

È una variabile che consente di scrivere un programma Linux che elabora file di testo di Windows, ad esempio; semplicemente assegna un nuovo valore a quella variabile, e tutto il resto funziona normalmente. –

+0

Mi sembra ragionevole. –

Problemi correlati