Bagaimana cara saya menjaga Angka dari angka mangling ketika mengimpor CSV?

12

Ketika saya membuka file CSV dalam Angka, "membantu" mengkonversi bidang yang dikenali sebagai angka dengan menghapus angka nol di depan, mengonversi hal-hal yang dikenali sebagai tanggal, dll.

Ambil contoh, Anda mengetik kode UPC ke dalam spreadsheet Numbers 005566778899 , Numbers akan secara otomatis mengonversinya menjadi 5566778899 . Ini bukan yang saya inginkan ...

Namun, cara saya menggunakan Bilangan, saya membuka database dengan ribuan kode UPC dengan nol sebelumnya. Beberapa dari mereka juga berisi tanggal yang Angka juga akan format ulang. Pada dasarnya saya tidak ingin semua fitur ini, saya ingin konten saya dibiarkan sendiri.

Bagaimana saya bisa mendapatkan Angka agar data saya tetap utuh ketika saya membuka file CSV?

Mengubah bidang menjadi teks setelah mengimpor tidak akan membantu karena data sudah kacau dengan ...

henryaaron
sumber
Apa maksud Anda "data sudah kacau"? Apakah maksud Anda mengonversi ke teks setelah file dibuka?
Daniel
Setelah membuka file, Excel dan Angka akan berubah di sekitar semua data Anda. Jadi apa pun yang harus saya lakukan, saya harus melakukannya sebelum saya membuka file.
henryaaron
7 tahun kemudian ini tampaknya masih menjadi lubang menganga. Ini bermasalah bahwa perjalanan pulang-pergi dari csv -> Numbers -> csv memodifikasi sel. Angka nol di depan adalah contoh yang bagus. Yang lainnya adalah persentase (mis. 20% menjadi 0,2). Yang lain adalah notasi ilmiah (mis. 1E-2 menjadi 0,01). Membungkus dengan tanda kutip ganda tidak membantu, dan awalan dengan tanda kutip diartikan secara harfiah. Saya pikir pilihan terbaik mungkin untuk mengawali semuanya dengan tanda kutip sebelum mengimpor dan menghapus semua tanda kutip awal setelah ekspor ...
Heath Raftery

Jawaban:

7

Jika bidang dalam file CSV dimulai dengan tanda kutip ( '), Excel dan Angka akan memperlakukan bidang sebagai teks, dan tidak merendernya dengan pemformatan numerik apa pun.

File CSV Anda tampaknya mencoba memaksa rendering teks melalui melampirkan bidang angka dalam tanda kutip ganda, tetapi Numbers dan Excel tampaknya tidak mengambil petunjuk bahwa angka penawaran ganda harus diperlakukan sebagai string. Triknya tampaknya untuk memodifikasi file CSV sehingga mereka menggunakan trik "dimulai dengan tanda tunggal" daripada trik "terkandung dalam tanda kutip ganda" untuk bidang numerik, tetapi simpan tanda kutip ganda untuk bidang teks yang melibatkan tanda baca (termasuk koma, tanda kutip, jeda baris, dll).

Untuk memproses file CSV Anda sehingga mereka melakukan ini, Anda dapat membuat aplikasi Automator.

Di Automator, buat Aplikasi baru.

Ini akan memiliki satu tindakan: Jalankan Script Shell (melewati input sebagai argumen). Ini skripnya:

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

Simpan aplikasi yang dihasilkan di Desktop Anda. Jatuhkan semua file CSV yang ingin Anda gunakan dalam Angka pada ikon aplikasi, dan itu akan dikonversi sehingga Angka harus menyimpan angka dalam bidang sebagai angka literal, dan tidak memformatnya atau membuang informasi.

Cadangkan data Anda sebelum mencoba ini; Ada kemungkinan bahwa string yang dibangun secara aneh di bidang rekaman dapat membuang hasil di sini.

masukkan deskripsi gambar di sini

Daniel
sumber
Membuat pekerjaan ini terlihat seperti itu memerlukan interaksi. Diskusi ini sebaiknya dilakukan dalam obrolan
Daniel
0

Secara khusus, inilah cara menangani angka nol di depan . Saya pikir pertanyaan Anda lebih tentang pemformatan sel daripada koreksi otomatis.

Seperti yang disebutkan fitur koreksi otomatis itu sendiri adalah item sistem, dan perlu dinonaktifkan dari System Preferences.

Adam Eberbach
sumber
Mengubah sel ke format ini tidak akan membantu karena data sudah kacau dengan ...
henryaaron
1
Saya akan mengharapkan nol untuk kembali jika Anda memformat sel - jika Numbers benar-benar menghapus nol pada impor yang benar-benar akan menyedot. Mungkin Anda harus memformat sel sebelum mengimpor.
Adam Eberbach
Itu pasti.
henryaaron
0

Huzzah, terima kasih untuk jawaban ini dan yang lainnya, sekarang ada metode dengan manfaat berikut:

  • Bekerja di Excel dan juga Angka
  • Dapat diotomatisasi.
  • Tidak terlihat dalam Angka.
  • Menghasilkan file CSV tanpa dampak dari impor hingga ekspor.

Caranya adalah dengan tidak mengawali setiap bidang dengan tanda kutip atau membungkus dengan tanda kutip ganda, tetapi untuk awalan dengan ="dan akhiran ". Pada Angka impor memperlakukan konten bidang sebagai string dan pada ekspor itu menjatuhkan awalan dan akhiran.

Berikut ini adalah satu liner praktis yang memproses lebih dulu file yang disebut my.csv:

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

Yang pertama sedmenempatkan ="di awal setiap baris, mengubah setiap koma ke ",=", lalu mengakhiri setiap baris dengan ". Yang kedua sedkemudian menghapus bidang yang kosong, karena Numbers tersedak. Akhirnya ia menulis file bernama tmp.csvyang dapat diklik dua kali lipat atau diteruskan ke openuntuk mengimpor ke Angka.

Dalam praktiknya ini akan memutarbalikkan bidang apa pun yang memiliki koma di dalamnya. Anda mungkin lebih baik hanya membungkus bidang-bidang yang dimulai dengan angka, tetapi kemudian Anda harus berhati-hati dengan awal dan akhir setiap baris dan versi ekspresi reguler Anda. Ini akan dilakukan di macOS:

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

Yaitu, cocokkan dengan awal baris atau koma, digit dan kemudian sejumlah karakter yang bukan koma, lalu akhir baris atau koma lainnya. Ganti dengan awal dan akhir yang sama, tetapi dengan bagian tengah dibungkus ="dan ".

Heath Raftery
sumber