Bir kaynak dosyanın sonunda neden boş satır olması önerilir?


232

Bazı kod stili araçları bunu tavsiye ve boş satır eksik hakkında uyarı bazı unix komut satırı araçları gördüğümü hatırlıyorum.

Fazladan boş bir çizgiye sahip olmanın sebebi nedir?


7
Dosya yeni satırla bitmezse bazı araçlar çalışmaz. Bu, sonunda boş bir satıra sahip olmaktan farklıdır (2 yeni satır olacaktır).
William Pursell

2
Boş satır ( \n\n) veya yeni satır \nmı demek istediniz ?
Ciro Santilli 法轮功 冠状 病 六四 事件 法轮功

13
catbir kabuk üzerinde dosya ve neden olduğunu bileceksiniz. Dosyanız benim kabuğumun istemini olması gerektiği yerden başka bir yerde görünüyorsa (satırın başında) muhtemelen senden nefret edeceğim. ;)
ThiefMaster

2
Bu eski soruya rastladım ve her cevabın, modern kodlayıcıların kodun kendisinde hiçbir değeri olmayan bir karakter eklemesi gerektiğini söyleyerek diğer araç ve sistemlerin hatalarını ve eksikliklerini haklı çıkarmaya çalıştığına inanamıyorum. Bir kafeste 5 maymun hakkında konuşun! :-D
Amos M. Carpenter

1
Daha iyi (daha genel) metin dosyalarını genel olarak yanıtlar :: stackoverflow.com/questions/729692/…
Ruben Bartelink

Yanıtlar:


188

Birçok eski araç, bir metin dosyasındaki son veri satırı bir satırsonu veya satır başı / yeni satır kombinasyonu ile sonlandırılmazsa hatalı davranır. Bunun yerine ^ Z (eof) ile sonlandığından bu satırı yoksayarlar.


1
Cevap için teşekkürler! Bu davranışı sergileyebilecek popüler araç örnekleri var mı?
Nick Merrill

8
@NickM Metin girişi alan veya bir metin dosyasını okuyan hemen hemen tüm POSIX / Unix komut satırı araçları, dosyanın \nsonunda bir satır sonu ( ) olduğunu varsayar . Vim gibi çeşitli metin editörleri ve çeşitli derleyiciler (özellikle C ++ ve Python) uyarı verir. (C ++ 'ın durumunda, standart açıkça gerektirir.)
greyfade


Yine de son satırda metin olabilir, soru boş bir satırdan bahsediyor \n\n.
jinawee

57

İki metin dosyasını birleştirmeyi denerseniz, ilki yeni satır karakteriyle biterse çok daha mutlu olursunuz.


38

Bir metin düzenleyicide bir dosyanın sonuna gittiğinizde bunun daha güzel bir imleç konumu olması dışında.

Dosyanın sonunda yeni bir satıra sahip olmak, dosyanın kısaltılmadığından emin olmanızı sağlar.


221
Dosya kısaltılabilir ve asla kn bile olmazsınız
Simon Nickerson

26

Dosyaya sondaki virgüllere neden izin verilir?

Bağlantılı kaynaktan aşağıdakiler kopyalanır (ve biraz kırpılır):

Değiştirme:

s = [
  'manny',
  'jack',
]

için:

s = [
  'manny',
  'jack',
  'roger',
]

farkta sadece bir satırlık bir değişiklik içerir:

  s = [
    'manny',
    'jack',
+   'roger',
  ]

Bu, sondaki virgül atlandığında daha karmaşık çok satırlı farkı yener:

  s = [
    'manny',
-   'jack'
+   'jack',
+   'roger'
  ]

Yalnızca bağlantı yanıtları SO için değerli değildir. Lütfen atıfta bulunmaya devam ederken ilgili bilgileri buraya kopyalayın.
isherwood

17

Dosyanın sonundaki boş satır, giriş akışından standart okumanın ne zaman sonlandırılacağını bilmesi için görünür, genellikle sona ulaştığınızı belirtmek için EOF döndürür. Dillerin çoğu EOF işaretini işleyebilir. Bu nedenle, eski günlerden beri, DOS altında, EOF işaretçisi F6 anahtarı veya Ctrl-Z, * nix sistemleri için Ctrl-D idi.

Hepsi olmasa da çoğu, EOF işaretçisine kadar okur, böylece çalışma zamanı kütüphanesinin girişten okuma işlevi, daha fazla okumayı ne zaman durduracağını bilir. Akışı Ekleme modu için açtığınızda, EOF işaretleyicisini o noktaya ekleyeceği açık bir şekilde kapatılana kadar EOF işaretleyicisini siler ve yanına yazar.

Eski araçlar boş bir çizgi ve ardından EOF işareti bekliyordu. Günümüzde, araçlar boş çizgiyi işleyebilir ve yok sayabilir.


6
^ D "EOF işareti" değildi. ^ D tuşuna basmak, kabuğun ön plan işlem grubunun okuduğu borunun yazma tarafını kapatmasına neden oldu, böylece o borudan bir okuma EOF döndürdü. "EOF işareti" yoktur.
William Pursell

@William Pursell Yanlışlıkla * NIX ve Windows'u kapattınız. Eski Windows / DOS kesinlikle çoğu dosyanın sonunda eski CP / M ile uyumluluk için bir dayanak olarak gömülü bir EOF işaretçisi (26, 0x1a) kullanmıştır (1983'ten sonra CP / M'yi kim kullandı?). Diğer "eğlenceli": DOS \r\nyerine \nASCIIZ ve ASCII $ karışımı kullanarak çağırır. Daha da kötüsü, daha sonra Windows'ta çoğu metin dosyasının başına genellikle bir Unicode bayt sırası işareti (BOM) ekleyin. Güzel "benzersizlik."

9

Ayrıca, dosyayı değiştirdiğinizde ve dosyanın sonuna bazı kodlar eklediğinizde - diff (en azından git standart konigürasyonda diff) son satırı değiştirdiğinizi gösterirken, gerçekte yaptığınız tek şey yeni satır simgesi ekledi. Yani cvs raporları daha az uygun hale gelir.


5

Bazı diller, giriş dosyalarını giriş satırları olarak tanımlar; burada her giriş satırı bir satır başı ile sonlandırılmış bir dizi karakterdir. Dilbilgileri bu şekilde tanımlanmışsa, dosyanın son geçerli satırı bir satır başı ile sonlandırılmalıdır.


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.