Bir CSV'yi içe aktarırken Rakamları sayıları yönetmekten nasıl koruyabilirim?


12

Bir CSV dosyasını Sayılar'da açtığımda, baştaki sıfırları çıkararak, tarih olarak tanıdığı şeyleri dönüştürerek tanıdığı alanları sayısal olarak dönüştürür.

Örneğin, bir Sayılar elektronik tablosu 005566778899'a bir UPC kodu yazdığınızda , Sayılar bunu otomatik olarak 5566778899'a dönüştürür . İstediğim bu değil ...

Ancak, yol Ben Numaraları kullanın, ben önceki sıfır ile UPC kodları binlerce veritabanlarını açın. Bazıları da Sayıların yeniden biçimlendirileceği tarihleri içerir . Temel olarak bu özelliklerin hiçbirini istemiyorum, içeriğimin yalnız kalmasını istiyorum.

Bir CSV dosyasını açtığımda Numbers'ın verilerimi olduğu gibi bırakmasını nasıl sağlayabilirim?

Verileri zaten karıştırdığı için alanları içe aktardıktan sonra metne dönüştürmek yardımcı olmaz ...


Ne demek "veriler zaten dağınık"? Dosya açıldıktan sonra metne dönüştürmek mi demek istediniz ?
Daniel

Dosya açıldıktan sonra, hem Excel hem de Sayılar tüm verileriniz etrafında değişecektir. Ne yapmam gerekiyorsa, dosyayı açmadan önce yapmam gerekiyor.
henryaaron

7 yıl sonra bu hala boşluk açıyor. Csv -> Numbers -> csv'den yapılan bir dönüşün hücreleri değiştirmesi problemlidir. Baştaki sıfırlar iyi bir örnektir. Bir diğeri yüzdelerdir (örneğin,% 20'si 0.2 olur). Bir diğeri bilimsel gösterimdir (örneğin, 1E-2 0,01 olur). Çift tırnak içine almak yardımcı olmaz ve kesme işaretiyle önek kelimesi kelimesine yorumlanır. Bence en iyi seçenek, ithalattan önce bir kesme işaretiyle her şeyi önek olarak eklemek ve ihracattan sonra tüm ilk kesme işaretlerini çıkarmak olabilir ...
Heath Raftery

Yanıtlar:


7

CSV dosyasındaki bir alan kesme işaretiyle ( ') başlıyorsa , hem Excel hem de Numbers, alanı metin olarak ele alır ve sayısal bir biçimlendirmeyle oluşturmaz.

CSV dosyalarınız, sayı alanlarını çift tırnak içine alarak metin oluşturmayı zorlamaya çalışıyor gibi görünüyor, ancak Sayılar ve Excel, çift tırnak tırnaklarının dize olarak ele alınması gerektiğini ima etmiyor. Hile, CSV dosyalarını değiştirmek için görünüyor, böylece sayısal alanlar için "çift tırnak içinde yer alan" numara yerine "tek bir kesme işaretiyle başlar" hilesi kullanıyorlar, ancak noktalama içeren metin alanları (virgül, tırnak işaretleri, satır sonları vb.).

CSV dosyalarınızı bunu yapacak şekilde işlemek için bir Automator uygulaması oluşturabilirsiniz.

Automator'da yeni bir Uygulama oluşturun.

Tek bir eylemi olacaktır: Kabuk Betiğini Çalıştır (girdiyi bağımsız değişken olarak geçirerek). İşte senaryo:

for f in "$@"
do
    perl -pi -e "s/\"\"([0-9A-Za-z: \.\-+]+)\"/'\1/g" "$f"
done

Ortaya çıkan uygulamayı Masaüstünüze kaydedin. Kullanmak istediğiniz CSV dosyalarını uygulama simgesindeki Sayılar'a bırakın ve Sayılar alanlardaki sayıları gerçek sayı olarak tutmalı ve biçimlendirmemeli veya bilgi atmamalıdır.

Bunu denemeden önce verilerinizi yedekleyin; bir kayıt alanında özellikle garip bir şekilde oluşturulmuş bir dizenin sonuçları buradan atabileceği muhtemeldir.

resim açıklamasını buraya girin


Bu işi yapmak biraz etkileşim gerektiriyor gibi görünüyor. Bu tartışma sohbette
Daniel

0

Özellikle, baştaki sıfırları nasıl ele alacağınız aşağıda açıklanmıştır . Bence sorunuz otomatik biçimlendirme yerine hücre biçimlendirme ile ilgili.

Daha önce de belirtildiği gibi, otomatik düzeltme özelliğinin kendisi bir sistem öğesidir ve Sistem Tercihleri'nden devre dışı bırakılması gerekir.


Verileri zaten berbat olduğu için hücreleri bu biçime dönüştürmek yardımcı olmaz ...
henryaaron

1
Hücreleri biçimlendirirseniz sıfırların geri gelmesini beklerdim. Belki de içe aktarmadan önce hücreleri biçimlendirmeniz gerekir.
Adam Eberbach

Kesinlikle öyle.
henryaaron

0

Huzzah, bu cevap ve diğerleri sayesinde , şimdi aşağıdaki faydaları olan bir yöntem var:

  • Excel'de ve Sayılarda Çalışır
  • Otomatikleştirilebilir.
  • Sayılarla görünmez.
  • İçe aktarmadan dışa aktarmaya sıfır etkili CSV dosyaları oluşturur.

İşin püf noktası, her alana kesme işareti koymak veya çift tırnak işareti sarmak değil, önek ="ve sonek eklemektir ". İçe aktarma sırasında Sayılar alan içeriğini bir dize olarak ele alır ve dışa aktarma sırasında önek ve soneki bırakır.

İşte bir dosyayı önceden işleyen kullanışlı bir astar my.csv:

sed 's/^/="/;s/,/",="/g;s/$/"/' my.csv | sed 's/=""//g' > tmp.csv

İlk satır her satırın başlangıcına sedyerleştirilir =", her virgül olarak değişir ",=", ardından her satırla biter ". İkincisi seddaha sonra boş alanları çıkarır, çünkü Sayılar onları boğar. Son olarak , numaraları tmp.csvikiye almak için çift tıklatılabilen veya aktarılabilen adlı bir dosya yazar open.

Pratikte bu, içinde virgül bulunan tüm alanları sarar. Yalnızca rakamlarla başlayan alanları kaydırmak daha iyi olabilir, ancak daha sonra her satırın başlangıcına ve sonuna ve normal ifadelerin sürümüne dikkat etmelisiniz. Bu macOS'ta yapılacak:

sed -E 's/(^|,)([[:digit:]][^,]*)($|,)/\1="\2"\3/g'

Yani, satırın veya virgülün başlangıcını, rakamı ve ardından virgül olmayan herhangi bir sayıda karakteri, sonra satırın sonunu veya başka bir virgülle eşleştirin. Aynı başlangıç ​​ve bitiş ile değiştirin, ancak orta bit ="ve içine sarılmış ".

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.