Làm cách nào để giữ Số từ xáo trộn số khi nhập CSV?


12

Khi tôi mở tệp CSV bằng Số, nó sẽ "chuyển đổi" một cách hữu ích các trường mà nó nhận ra là số bằng cách tước các số 0 đứng đầu, chuyển đổi những thứ mà nó nhận ra là ngày, v.v.

Lấy ví dụ, bạn nhập mã UPC vào bảng tính Số 005566778899 , Số sẽ tự động chuyển đổi thành 5566778899 . Đây không phải là điều tôi muốn ...

Tuy nhiên, cách tôi sử dụng Số, tôi mở cơ sở dữ liệu với hàng ngàn mã UPC với các số 0 trước đó. Một số trong số chúng cũng chứa ngày mà Số cũng sẽ định dạng lại. Về cơ bản tôi không muốn bất kỳ tính năng nào trong số này, tôi muốn nội dung của mình được để yên.

Làm cách nào tôi có thể nhận được Số để giữ nguyên dữ liệu của mình khi tôi mở tệp CSV?

Chuyển đổi các trường thành văn bản sau khi nhập sẽ không giúp ích vì dữ liệu đã bị rối với ...


Bạn có ý nghĩa gì "dữ liệu đã bị rối tung"? Bạn có nghĩa là chuyển đổi thành văn bản sau khi tập tin được mở?
Daniel

Khi mở tệp, cả Excel và Numbers sẽ thay đổi xung quanh tất cả dữ liệu của bạn. Vì vậy, bất cứ điều gì tôi phải làm, tôi phải làm điều đó trước khi tôi mở tập tin.
henryaaron

7 năm sau đây dường như vẫn là một lỗ hổng. Vấn đề là một chuyến đi khứ hồi từ csv -> Numbers -> csv sửa đổi các ô. Các số 0 đứng đầu là một ví dụ tốt. Một số khác là tỷ lệ phần trăm (ví dụ: 20% trở thành 0,2). Một số khác là ký hiệu khoa học (ví dụ: 1E-2 trở thành 0,01). Đóng gói trong dấu ngoặc kép không giúp ích gì, và tiền tố với dấu nháy đơn được hiểu theo nghĩa đen. Tôi nghĩ rằng lựa chọn tốt nhất có thể là tiền tố mọi thứ với dấu nháy đơn trước khi nhập và loại bỏ tất cả các dấu nháy đơn ban đầu sau khi xuất ...
Heath Raftery

Câu trả lời:


7

Nếu một trường trong tệp CSV bắt đầu bằng dấu nháy đơn ( '), cả Excel và Numbers sẽ coi trường đó là văn bản và không hiển thị nó với bất kỳ định dạng số nào.

Các tệp CSV của bạn dường như cố gắng ép kết xuất văn bản thông qua các trường số kèm theo trong dấu ngoặc kép, nhưng Số và Excel dường như không đưa ra gợi ý rằng số trích dẫn kép nên được coi là chuỗi. Thủ thuật dường như là sửa đổi các tệp CSV để chúng sử dụng thủ thuật "bắt đầu bằng một dấu nháy đơn" thay vì thủ thuật "có trong dấu ngoặc kép" cho các trường số, nhưng giữ dấu ngoặc kép cho các trường văn bản liên quan đến dấu câu (bao gồm cả dấu phẩy, dấu ngoặc kép, ngắt dòng, vv).

Để xử lý tệp CSV của bạn để chúng thực hiện việc này, bạn có thể tạo ứng dụng Máy tự động.

Trong Automator, tạo một Ứng dụng mới.

Nó sẽ có một hành động duy nhất: Chạy Shell Script (chuyển đầu vào dưới dạng đối số). Đây là kịch bản:

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

Lưu ứng dụng kết quả trên Bàn làm việc của bạn. Thả bất kỳ tệp CSV nào bạn muốn sử dụng vào Số trên biểu tượng ứng dụng và chúng sẽ được chuyển đổi để Số phải giữ các số trong các trường dưới dạng số bằng chữ và không định dạng chúng hoặc vứt bỏ thông tin.

Sao lưu dữ liệu của bạn trước khi thử điều này; có thể một chuỗi được xây dựng đặc biệt kỳ lạ trong trường bản ghi có thể làm mất kết quả ở đây.

nhập mô tả hình ảnh ở đây


Làm cho công việc này trông giống như nó cần một số tương tác. Cuộc thảo luận này sẽ diễn ra
Daniel

0

Cụ thể, đây là cách xử lý số không hàng đầu . Tôi nghĩ rằng câu hỏi của bạn là về định dạng ô hơn là tự động sửa.

Như đã đề cập, bản thân tính năng tự động sửa lỗi là một mục hệ thống và cần được tắt khỏi Tùy chọn hệ thống.


Chuyển đổi các ô thành định dạng này sẽ không giúp ích vì dữ liệu đã bị rối với ...
henryaaron

1
Tôi đã mong đợi các số không quay trở lại nếu bạn định dạng các ô - nếu Số thực sự loại bỏ các số không đó khi nhập sẽ thực sự hút. Có lẽ bạn sẽ phải định dạng các ô trước khi nhập.
Adam Eberbach

Nó chắc chắn nhất làm.
henryaaron

0

Huzzah, nhờ câu trả lời này và các câu hỏi khác, giờ đây có một phương pháp với các lợi ích sau:

  • Hoạt động trong Excel cũng như số
  • Có thể tự động.
  • Là vô hình trong số.
  • Tạo các tệp CSV không tác động từ nhập sang xuất.

Bí quyết là không đặt tiền tố cho mỗi trường bằng dấu nháy đơn cũng không bao gồm dấu ngoặc kép, mà là tiền tố có ="và hậu tố với ". Khi nhập Số xử lý nội dung trường dưới dạng chuỗi và khi xuất, nó giảm tiền tố và hậu tố.

Đây là một lớp lót tiện dụng xử lý trước một tệp có tên my.csv:

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

Đầu tiên sedđặt ="ở đầu mỗi dòng, thay đổi từng dấu phẩy thành ",=", sau đó kết thúc mỗi dòng bằng ". Cái thứ hai sedsau đó loại bỏ bất kỳ trường trống nào, bởi vì Numbers bóp nghẹt chúng. Cuối cùng, nó viết một tệp có tên tmp.csvcó thể được nhân đôi nhấp hoặc chuyển openđể nhập vào Số.

Trong thực tế, điều này sẽ cắt xén bất kỳ trường nào có dấu phẩy trong đó. Bạn có thể tốt hơn là chỉ gói các trường bắt đầu bằng số, nhưng sau đó bạn cần cẩn thận với điểm bắt đầu và kết thúc của mỗi dòng và phiên bản biểu thức chính quy của bạn. Điều này sẽ làm trên macOS:

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

Nghĩa là, khớp với bắt đầu của dòng hoặc dấu phẩy, một chữ số và sau đó là bất kỳ số ký tự nào không phải là dấu phẩy, sau đó là cuối dòng hoặc dấu phẩy khác. Thay thế bằng cùng một bắt đầu và kết thúc, nhưng với bit giữa được bọc trong ="".

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.