Hatırlatma - \ r \ n veya \ n \ r?


390

Bunları hatırlayamıyorum. Peki, eski moda ASCII hatlarını doğru bir şekilde sonlandırmanın doğru yolu nedir?


11
Bunu yaparsanız, dosyalarınızı ikili modda açtığınızdan emin olun . Aksi takdirde standart C / C ++ dosya akışları "\ n" (metin dosyaları için (varsayılan)) platforma özgü satır sonu dizisine (ELS) dönüştürür. Böylece pencerelerdeki "\ r \ n" fiziksel diskteki "\ r \ r \ n" biçimine dönüşür. Not: sadece dosyayı geri okumak için C / C ++ kullanırsanız, ELS dosyadan okunduğunda EL \ "\ n" biçimine dönüştürüldüğünü fark etmezsiniz.
Martin York

@Martin - Ben .net ve (bu örnek için) "\ r \ n" ile File.AppendAllText kullanıyorum ve ben sadece bir dosyaya bir göz attım ve sonunda \ r çoğaltma yoktur çizgi. Sihirli?
Daniel Mošmondor

@Daniel: Daha spesifik olmalıydım. C / C ++ akışları. Bir dosya ile ilişkilendirildiğinde ve metin modunda açıldığında . Ayrıca dosyaya nasıl baktığınıza da bağlıdır (bir hexeditor kullanın).
Martin York

@Martin - hex modunda kullanılan PSPad ...
Daniel Mošmondor

1
Eski klavyelerde Enter tuşuna Return tuşu deniyordu. Önce Dönüş geldi, sonra Linefeed yanıt olarak üretildi. Çok fazla geçmişiniz olduğunda her şey çok açık.
Mark Ransom

Yanıtlar:


1084

Hatırlamak için ' r etur n ' kelimesini kullanırdım, r n'den önce gelir.


116
Ve kullanmak için kelime dönüş olduğunu hatırlamak için, taşıma dönüş olduğunu unutmayın . "Return" seçeneğinin Mac klavyelerinde tuşun adı olduğunu unutmayın, yoksa daha sonra bir PC klavyesine bakabilir, "Enter" adlı tuşa bakabilir ve harf sırasını yanlış anlayabilirsiniz!
Rob Kennedy

3
@ David Ama bu etkiyi merak ediyorum \n\rve \r\nonlar, aynı etkiyi yapmak değil aynı? Farkı söyleyebilir misin?
Mr.Anubis

7
@Anubis, belirli bir nokta vuruşlu yazıcınız varsa, komutların sırası önemli olmamalı çünkü HİÇBİR fark olmamalıdır. Ancak, bazı yazıcılarda ekstra boş satır elde edersiniz veya hiç satır ilerlemesi olmaz. Ve yukarıda bahsedilen her şey metin editörleri için geçerlidir - karıştırılacak, TextStream sınıfları hastalanacak vb. Sipariş IS önemli. :)
Daniel Mošmondor

12
@ DanielMošmondor Alternatif olarak, siparişin impoRtaNt olduğunu hatırlayabilirsiniz. Ya da SO'ya sorduğunuzda birisi size daha sonra unuttuğunuz bir RemiNder verdi. Yoksa bunu edemez r sırası ve n :) orada ters çünkü bir hatırlatma olarak sizin soyadını kullanmak
Daniel Daranas

5
@RobKennedy haha ​​biliyorsun buraya geldim ve dönüş hakkında okudum ve "harika!" Diye düşündüm. Sonra yorumunuzu okudum. Şimdi hangi anahtara bakmamam gerektiğini her hatırlayamadığım zaman - "Enter" anahtarıma bakıyorum ve "burada bir şeyler çok yanlış" diye düşünüyorum ... bunu düşünmekten haha!
Wayne Uroda

53

C # kullanıyorsanız Environment.NewLine, MSDN'e göre kullanmanız gerekir :

Unix olmayan platformlar için "\ r \ n" içeren bir dize veya Unix platformları için "\ n" içeren bir dize.


46
Aslında bu tür şeyler ne yaptığınıza bağlıdır. Yalnızca düz metinleri konsola veya yerel kullanım için bir dosyaya çıkarıyorsanız Environment.NewLine, sorun yoktur. Ancak, işleri iyi tanımlanmış bir biçimde yazıyorsanız, biçim de yeni satırı tanımlayabilir. Örneğin, HTTP protokolü , platformdan bağımsız olarak, üstbilgiler vb. İçin satır sonlandırıcı olarak kullanmanız gerektiğini belirtir \r\n.
Matti Virkkunen

3
Evet, bu gerçekten kötü bir tavsiye.
IvanP

Bu nedenle web iletilerinizden kaçmanız ve \ r \ n (windows), \ r (mac), \ n (linux) web sunucusuna \ r \ n olarak gönderildiğini doğrulamak için birim testleri oluşturmanız gerekir.
TamusJRoyce

37

Yeni hat işletim sisteminize bağlıdır:

DOS & Windows: \r\n 0D0A (hex), 13,10 (decimal)
Unix & Mac OS X: \n, 0A, 10
Macintosh (OS 9): \r, 0D, 13

Daha fazla ayrıntı burada: https://ccrma.stanford.edu/~craig/utility/flip/

Şüphe duyduğunuzda, bir dosyanın yeni satırını nasıl kodladığını görmek için herhangi bir ücretsiz hex görüntüleyici / düzenleyici kullanın.

Benim için hatırlamama yardımcı olması için aşağıdaki kılavuzu kullanıyorum: 0D0A = \ r \ n = CR, LF = ca rr iage r eturn, li n e feed


7
Garip, bilen bu insanlardan biri olduğum 0D0Aezbere, ama yine karıştırır \rve \n.
Nyerguds

1
Ya da, \ r satır başı ve \ n satır besleme olduğunu hatırlıyorum ... sadece onların sırasını hatırlamıyorum, bu yüzden hangisinin 0D ve hangisinin 0A olduğunu hatırlamaya yardımcı olmaz;)
Nyerguds

20

Dizi CR (Satır Başı) - LF (Satır Besleme) şeklindedir. Nokta vuruşlu yazıcıları hatırlıyor musunuz? Kesinlikle. Yani - doğru sipariş \ r \ n


Bence bu en mantıklı cevap
David Snabel-Caunt

12
LF + CR yazıcılarda aynı CR + LF'yi yapar.
Ikegami

10
Kabul etmiyorum, @David. (Çünkü bu konuda, ya da daktilo sadece nokta vuruşlu yazıcıların düşünerek onlar konum getiri üzere arabasına sahip olanlar) yeterli değildir. Nasıl çalıştıkları hakkında yalnızca temel bilgilerle, satırın başlangıcına dönmeden önce veya sonra kağıdı ilerletip ilerletmemenin önemli olduğunu düşünmek için hiçbir neden yoktur. Hem \ r \ n hem de \ n \ r kağıdı aynı konuma yerleştirin.
Rob Kennedy

@ikegami çoğu yazıcıda değil, hepsinde değil. Bu davranışı yapılandırmak için DIP anahtarları da vardı. :)
Daniel Mošmondor

5
Satır beslemesini satır başından sonra koymanın bir nedeni, gereken toplam süreyi azaltmasıdır - kafa kağıdın sol kenarına dönerken, merdane bir satırı dizine ekleyebilir. Önce daha uzun işlem başlar, bu nedenle işlemin tamamlanması daha uzun sürdüğü zaman tamamlanır. O zamanlar bunun gibi nedenlerle çok şey yaptık; 110 baud'da birkaç yüz satır beklediğinizi hayal edin ...
Jerry Andrews

8

Herhangi bir .NET dilinde, Environment.NewLinetercih edilir.


Sabit dizgiler için çalışmaz. Gerektiğinde, sabit kullanmamak ve bunun yerine statik dize kullanmak daha iyidir;)
TamusJRoyce

5

Bunu manuel olarak yaparken dikkatli olun.
Aslında bunu hiç yapmamanızı tavsiye ederim .

Gerçekte, platforma özgü hat sonlandırma sekansı LTS'den bahsediyoruz.

Bir dosyayı metin modunda açarsanız (yani ikili değil), akışlar "\ n" yi platformunuz için doğru LTS'ye dönüştürür. Daha sonra dosyayı okuduğunuzda LTS'yi tekrar "\ n" biçimine dönüştürün.

Sonuç olarak, bir windows dosyasına "\ r \ n" yazdırırsanız, fiziksel dosyada "\ r \ r \ n" dizisini alırsınız (onaltılık düzenleyiciye bir göz atın).

Tabii ki bu, platformlar arasında dosya aktarımı söz konusu olduğunda gerçek bir acıdır.

Şimdi bir ağ akışına yazıyorsanız, bunu manuel olarak yaparım (çoğu ağ protokolü bunu özel olarak adlandırır). Ancak akışın herhangi bir yorumlama yapmadığından emin olurum (bu nedenle ikili mod uyguntu).


4

\r\n Windows için gayet iyi yapacağız.


\nNot Defteri'nin son sürümü de dahil olmak üzere tek bir pencere de iyi çalışır.
André Caron

Bence farklı editörler farklı uçlar kullandığından modern editörler satır sonlarını tespit edecek.
David Snabel-Caunt

1
Aslında değil: Bunu pencerelerde bir dosyaya (metin modunda açılan std C / C ++ dosyası) yazdırırsanız, fiziksel dosya "\ r \ r \ n" içerecektir (onaltılık düzenleyiciyle kontrol edin). Tekrar okuduğunuzda "\ r \ n" tekrar tek bir "\ n" biçimine dönüştürülür.
Martin York

2
Aslında, @DavidCaunt, sadece \ n denedim ve Win8 üzerinde not defteri ile çalışmıyor.
philk

4

Gönderen Vikipedi (bu makalenin adresinden OS için doğru olan okuyabilir):

ASCII veya uyumlu bir karakter kümesine dayanan sistemler ayrı ayrı LF (Satır besleme, '\ n', 0x0A, 10 ondalık) veya CR (Satır başı, '\ r', 0x0D, ondalık 13) veya CR'yi kullanır LF (CR + LF, '\ r \ n', 0x0D0A).


3

\r\n

Hatırladığım kadar garip çünkü kullandığım daktilonun tam tersi .
Normal olsaydı hatırlamaya gerek yoktu ...:-)

wikipedia dan daktilo * Wikipedia'dan görsel

Eğer rakama hattı bitirmek daktilo olarak kullanmak satırbaşı kolunu markaları davul, rulo önce, yeni satır sonra ve el çalışmasına izin satırbaşı .

Sen dinleyebilirsiniz freesound.org bu kayıttan başında kağıt besleme ses ve civarında -1: ucundan 03 saniye, tamburun hat sesin sonu için çan uyarıdan sonra o rulo ve sonrası taşıma dönüşlerinden biri.


2

C # kullanıyorsanız, neden kullanmıyorsunuz Environment.NewLine? (bazı dosya yazar nesneleri kullandığınızı varsayalım ... sadece onu geçmek Environment.NewLineve doğru sonlandırıcıları idare edecek.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.