Neden CSV kullanmaya devam ediyoruz? [kapalı]


14

Neden CSV kullanmaya devam ediyoruz?

Kısa bir süre önce sağlık alanında çalışmaya geçtim ve veri aktarım standartlarındaki harika çalışmalara rağmen, tüm veri aktarımı CSV'de , hem dış kuruluşlara rapor vermek hem de yeni sistemler uygularken veri taşımak için.

Ne yazık ki CSV kullanımı, aynı aptal hataların, geliştirici süresinin aynı israfıyla sonsuz tekrarlanmasının nedenidir. (hatalı çıkış, boş alanları işlememe vb.)

Daha iyi yapabileceğimizi biliyorum ve JSON ve XML (örneğe bağlı olarak) arasındaki her şey iyi olurdu. (Çoğu zaman bu bir MS SQLserver 2005'ten diğerine giden verilerdir!)

Sanki bunu her gördüğümde tam anlamıyla bir geliştirici annesinin zamanını boşa harcadığımı hissediyorum.

Öyleyse neden birbirimizi şaşkına çeviriyoruz? Ne zaman duracağız?


20
Sadece sağlık alanına giriyorsanız ve CSV'nin kötü olduğunu düşünüyorsanız ... sadece HL7 ile karşılaşana kadar bekleyin!
G__

3
@Greg LOL, onu korkutma, sürpriz her zaman en iyisidir :)
James Love

47
-1 Bu, CSV'nin neden olmadığı sorunlara karşı bir CSV karşıtıdır. XML'i bir kütüphane olmadan okuyup yazdıysanız tam olarak ne olacağını düşünüyorsunuz? Sorunlarınız yüz kat daha kötü olurdu.
Jesse Millikan

12
"Öyleyse neden birbirimizi şaşkına çeviriyoruz? Ne zaman duracağız?" Bilmiyorum, çalıştığım yerde CSV'yi herkes şaşkınlığa uğramadan iyi kullanmayı başardık (gerçekten - bu çok daha sinir bozucu olan XML aşaması). Belki siz ve çalışma arkadaşlarınız yanlış bir şey yapıyorsunuz?
Hayal kırıklığına

3
Şimdiye kadarki tüm tartışmalar CSV ile ilgili çok gerçek bir problemi kaçırıyor: sınırlayıcı karakterin verilerde görünmesi muhtemel ve CSV bu soruna optimalden daha az yaklaşıyor (verilerin etrafına tırnak koymak sorunu aşağı doğru itiyor) . Daha iyi bir yaklaşım, boru ile sınırlandırılmış dosyaları kullanmak olacaktır.
Larry Coleman

Yanıtlar:


10

Sizin durumunuzda, CSV'nin zor şartnameden yoksun olması nedeniyle iyi bir uyum olmadığı anlaşılıyor.

Önemsiz veriler için doğru seçim değildir.

CSV neden / ne zaman iyi bir seçim? Muhtemelen çok fazla örnek, düz veriler için sadeliğin faydaları açıktır. Veriler düzgün bir şekilde sterilize edildiği / kaçıldığı sürece herhangi bir sorun yoktur. Genel olarak konuşursak, tüm bu durumlar basit / önemsiz olacaktır. Elbette, içerikte görünen standart sınırlayıcı, CSV ile uğraşırken genellikle bir acıdır.

Ancak teknik olmayan bir istemciyi bir Excel sayfasından veya başka bir benzer kullanım durumundan veri göndermekten daha fazla bir şey yapıyorsanız, CSV muhtemelen herhangi bir ciddi kullanım için yetersizdir.

Bunun için ayrıntılı standart şema belirtimi yapabildiğiniz için XML çok daha iyi bir uyum (evet JSON'dan daha fazla). (Spesifikasyonların / şemaların birden fazla uygulama stilinin (XSD, DTD ve Relax NG) esnekliğinden bahsettiğinden bahsetmiyoruz bile)

Özellikle bant genişliğinin önemli olduğu kapalı döngü sistemlerinde JSON, XML'den daha uygun olabilir, ancak şema belirtim dillerinin eksikliği genellikle kurumsal düzey uygulamalardan kaçınır.


3
Gerçekten de "Veriler düzgün bir şekilde sanitize / kaçtığında". Ancak birçok programcıya giden yol bunu yanlış anlayabiliyor gibi görünüyor, kendi yazılarını yazıyorlar (sözde kod write('"');write(fld1);write('"');reklamı nauseum'da). Sonra kendi ayrıştırıcılarını yazıyorlar ....
Gerry

3
Evet, kendi mürettebatınız gerçekten bu internet şeyini kullanmaya başlamalı , belki de kelimenin anlamını öğrenmeli ... Kütüphane.
ocodo

bilgi paylaşımı! yeniden kullanılabilir kod! yeni aptalca fikirler. Diğer insanların hatalarını tekrarlamak, büyük ^ 50 büyükbabam için yeterince iyiydi ve benim için yeterince iyi!
Steve314

@ Steve314 - / me "hem korku hem de eğlence ile yüzleşiyor."
ocodo

Ancak CSV'nin zor bir spesifikasyonu var . Şimdi sorunumuz her zamanki sorun - Excel buna% 100 uymuyor.
gbjbaanb

63

CSV lehine birkaç puan atayım:

  • CSV'nin uygulanması ve ayrıştırılması basittir (OP'de önerilen herhangi bir alternatiften daha r)
  • CSV, gezegendeki hemen hemen her yazılım parçası tarafından anlaşılmaktadır (geçmiş ve şimdiki)
  • CSV oldukça düz, basit bir şemayı zorlar (tek bir düz alan listesi vardır)
  • CSV, XML, JSON veya (UGH!) HL7'den (V2.x, pre-xml) daha fazla okunabilir

14
'Şeytanlar savunucusu' oynamak zorunda değilsiniz ... yaptığınız tüm puanlar tamamen geçerli ve CSV'nin neden hala kullanıldığını açıklıyor. Sadece sade daha basit.
GrandmasterB

7
@Stephen: Kaç farklı CSV varyasyonu biliyorsunuz?
FrustratedWithFormsDesigner

3
@FrustratedWithFormsDesigner kaç tane kaçış kuralı düşünebilirsiniz?
Stephen

3
@Pierre 303 Keşke aptalca bir kanıt olsaydı. Geliştirici kanıtı olsaydı mutlu olurum.
Stephen

8
@ Pierre303, aptal kanıtı ... Eğer bir şeyi 'aptal kanıtı' yaptığınızı düşünüyorsanız, bunu yeterli aptallarla test etmediniz.
ocodo

29

Geriye dönük uyumluluk. Dış kuruluş web hizmetiniz CSV'yi yönetiyorsa ve mevcut tüm araçlarınız CSV'yi işliyorsa, hiçbir tarafın yeni bir hizmete geçmek için herhangi bir motivasyonu yoktur. Harici kuruluşunuz neden farklı bir biçimi desteklemeye başlasın? Birlikte çalıştıkları hiç kimse kullanamaz! Neden farklı bir format üretmeye başlıyorsunuz? Çalıştığınız kuruluşların hiçbiri kabul etmiyor!

Gerçek Burada gördüğüm konu, bir neden geliştiricilerinin kendi CSV kodu her zaman kullanıma sunacağız? Eğer sağlam, kaya gibi sağlam bir CSV kütüphanesi kullansaydı, tarif ettiğiniz sorunlara sahip olmazlardı. Sorunlar geliştiricilerin bir kütüphane kullanmak yerine kendi çözümlerini yuvarlamalarından kaynaklanıyor ve dürüstçe JSON veya XML'e taşınmanın bunu sihirli bir şekilde nasıl düzelttiğini göremiyorum. Hala bir kütüphane kullanmak yerine onları yeniden düzenlemeye çalışan insanlar olurdu.


4
Her seferinde kendi başına haddeleme için +1. Hatalı bir veri formatı değil, öğrenmeyen geliştiriciler görüyorum. :-)
G__

'geriye dönük uyumluluk' - tabii ki haklısınız - ancak ilerlememek binlerce maliyete mal oluyor.
Stephen

Kendi CSV kütüphanenizi yuvarlamanız iyi ... sadece yeniden kullanın !
GrandmasterB

5
@Stephen: Hayır, her ihtiyacınız olduğunda CSV'yi yeniden uygulamak binlerce dolara mal oluyor. Biçim olarak CSV gayet iyi, doğru anlayamayan geliştiriciler sorun.
Anon.

6
@Stephen: Yani CSV ile ilgili probleminiz çok basit olması ve daha karmaşık bir şey mi istemeniz?
Anon.

15

CSV biraz daha hızlı , daha küçük boyutlu , kullanımı çok kolay (Excel'de bile) ve mevcut birçok uygulama bunu anlıyor, yaygın olarak kullanılan bir standarttır .

Birçok durumda hala ilk tercihtir.

Ben şahsen hala bu formatı çok seviyorum. Ancak JSON'u da kullanıyorum, ancak web kullanıcı arayüzü gibi diğer uygulamalar için.


1
Ben "biraz" ilk kullanımı dışında, bu her biti ile katılıyorum.
Orbling

3
Baştaki sıfırları tutması gereken veriler varsa, Excel ile mutlak bir bas *** rd olabilir .... Bana nasıl bildiğimi sor! ... bunun dışında Excel iyi bir arayüz sağlar.
Dal

@Dal: Bir kredi birliğinde çalışıyordum ve kredi kartı numaraları içeren CSV dosyalarıyla uğraşmak zorunda kaldım. Hangi 16 basamaklı. Bu Excel 15'e yuvarlandı.
dan04

Ya da daha kötüsü onları bilimsel gösterime dönüştürdü. :( ACH işlemimizde uzak hesap numarasının geçersiz olduğunu ilk kez bir hata aldığımı hatırlıyorum, sadece birisinin excel'deki csv'yi düzenlediğini (sadece bir satırı kaldırmak için) ve 30'luk bir demet değiştirdiğini öğrenmek için hesap numaralarını 2.3456356e29 ve benzeri numaralara çevirin
cabbey

1
@Jeanne: CSV'nin aslında JSON gibi bir sayı / dize ayrımı olsaydı, Excel'e değerlerin hangi tipte olduğunu söylemek oldukça kolay olurdu. Bu sorunlar, CSV'nin dize olarak yazılmasından kaynaklanmaktadır.
dan04

15

Birincisi ve en önemlisi, CSV verilerini tüketmek önemsiz olmasa da, bunu oluşturmak son derece kolaydır.

Ayrıca ne JSON ne de XML'in doğru bir şekilde elde edilmesinin daha kolay olmadığını da belirtmeliyim (üretici veya tüketici için). Aslında, bir çok insanın XML verilerini ayrıştırmak için normal ifadeleri kullanmaya çalıştığını bilmek neredeyse hiç etrafa bakmak zorunda değildir, ancak bunu yapmanın kesinlikle işe yaramayacağı ve çalışmayacağı konusunda hiçbir soru yoktur.

CSV ile ortaya çıkabilecek (ve yapabilen) sorunların çoğu hem JSON hem de XML ile ortaya çıkabilir. Özellikle XML, kendi başına çok daha fazla potansiyel sorun ekler. XML verilerini ayrıştırma kütüphanesi, CSV verileri için benzer bir kütüphaneden genellikle daha büyük, daha yavaş ve kullanımı daha zordur.


1
doğru üretmek için görünmek son derece kolaydır, önemsiz verileriniz olduğunda bir spesifikasyona sahip olmayan bir şey tüketmek önemsiz değildir.
Stephen

2
@Stephen: Ben yaptım notu değil o ilk cümlede "doğru" yer alır. Onun ihmal kasıtlı oldu!
Jerry Coffin

4

İlk olarak, formatta bazı çok gerçek problemler olduğunu kabul ediyorum:

  • Bu sıkıca yazılmış.
    • Metin ve sayısal değerler arasında hiçbir ayrım yapılmazsa, Excel yanlış tahmin eder ve posta kodlarınızı ve kredi kartı numaralarınızı bozar.
    • İkili verileri temsil etmenin standart bir yolu yoktur.
    • CSV dosyalarını SQL veritabanlarına içe aktarırken sorun olan NULLve arasında ayrım yapmak için standart bir yol yoktur ''.
  • "Özel karakterler" için zayıf destek.
    • (XML &#xNNNN;veya JSON \uNNNN) gibi sayısal karakter referanslarının olmaması, kontrol karakterlerini veya ASCII olmayan karakterleri temsil etmenin standart bir yolu olmadığı anlamına gelir.
    • Birçok uygulama, bir alandaki satır kesmelerini düzgün bir şekilde uygulamamaktadır.
  • Bir standart eksikliği. Orada RFC 4180 ama evrensel olarak takip değil.

Ama diğer yandan:

  • Alternatifler daha kötü. Ağaçların etrafında tasarlanan JSON ve XML, özellikle tablo bazında tablo tabanlı veriler için ...
  • KOMPAKT! XML'de, her satırdaki her sütun için bir başlangıç ​​etiketi ve bitiş etiketi olması gerekir . CSV'de sütun başlıklarını yalnızca bir kez yazarsınız.
  • CSV oluşturmak çok kolaydır.
  • Programcı olmayanlar CSV dosyalarını Excel'de açabilir.

geri viteste; excel olarak bu verileri kullanmak çuvallanabilir bir suç olurdu, CSV kötü üretmek kolaydır, kompaktlık bir sorun değildir, ağaçlar bu veriler için daha uygundur.
Stephen

4

Birçok analist Excel kullandığından (pivot tablolar ve benzeri için) ve CSV çıktısı yerel Excel formatına göre çok daha kolaydır.

Dipnot: Excel'de CSV dosyalarını ele alırken, önde gelen sıfırları kaldırmak ve hassasiyeti kaybetmek gibi kaç sorun gördüğüm düşünüldüğünde, bu muhtemelen daha kolay olmanın yanlış bir hissidir.


Bu +1000. Excel, verilerin hızlı ve kirli analizi için katil uygulamadır (bir kez bildiğinizde). Excel'e ihracat yapabilmek, iş, araştırma vb. Alanlardaki geliştirici olmayanlara güçlü güçler verir. CSV dışa aktarmaları Excel'i çalıştırır.
johannes

2

CSV ile ilgili bir sorun varsa, CSV o kadar basit görünüyor ki birçok geliştirici kendi ayrıştırıcılarını / yazarlarını icat etmeye çalışıyor ve daha sonra kaçmayı doğru işlemediği için CSV'yi suçluyor. İyi bir CSV ayrıştırıcısıyla (çok iyi biri), hiç sorun olmayacak.

Bahsedilen bazı CSV önemsiz veriler için iyi değil, ancak kabul etmiyorum. Farklı veri kümeleri farklı "kapsayıcı" etiketlere yerleştirilebildiğinden XML önemsiz verilere izin verir. CSV ile aynı efekti elde etmek için her zaman farklı dosyalara farklı veriler koyabilirsiniz.

Ayrıca, bence, XML'i veri aktarımı için kullanmak temel olarak XML'nin amacına aykırıdır - veri aktarımı genellikle sağlayıcılar ve tüketiciler arasında istikrarlı bir sözleşme gerektirirken, XML tüketildiğinde yoruma tabi genişletilebilir bilgi taşımayı amaçlamaktadır.


1

Ben sadece CSV sadece basit metin verileri, sadece virgül ve sonunda noktalı virgül / bitiş çizgisi ile iyi olduğunu düşünüyorum.

Ağaç mimarisi verileri veya birleştirilmiş veriler CSV ile neredeyse hiç kullanılamaz.

CSV, excel'deki gibi düz bir 2D metin dizisidir, fazla bir şey değildir ...


1

Gerçekten ana bilgisayarlar ve burada excel ile ilgili.

Ana bilgisayarlar çünkü bu eski sistemler CSV kullanarak nasıl iletişim kuracağını anladı. Böylece, verileri döken büyük uygulamalar, bunları okuyabilir ve yazabilir ve şimdi değiştirmek için bir nedeni yoktur.

Excel CSV'leri doğrudan açabildiğinden. Aslında, yüklediğinizde .csv uzantısını alır. Kullanıcılar sadece biraz komik görünümlü excel simgesini tıklayın ve açılır ve kavga edebilecekleri güzel bir ızgara yapar.

Şimdi, excel'in modern sürümleri, örneğin XML'i doğrudan okuyabilir. Ancak bunu yapmak için, kullanıcının "bu resme çift tıklamaktan" biraz daha fazlasını anlaması gerekir. Ve doğru resme çift tıklamak bazı endüstrilerde sormak için çok fazla olabilir. . .


-1

Çok fazla teknik cevap gördüm ama insanların CSV'yi kullanma nedenlerinin, insanların başka birçok teknik / teknoloji kullanmalarının aynı nedeni olduğundan şüpheliyim: çünkü en aşina oldukları şey bu


-1

neden kullanıyorum?

  1. müşteri bunu istiyor
  2. ağ üzerinden xml'den daha hızlıdır (daha küçük ağ yükü)
  3. Verileri elde etmek için daha karmaşık bir şeye gerek yok
  4. çapraz platform
  5. okunabilir insan
  6. bunun için okuyucuları ve yazarları uygulamak kolay

vs vs.

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.