ฉันจะป้องกันไม่ให้มีการรวบรวมตัวเลขเมื่อนำเข้า CSV ได้อย่างไร


12

เมื่อฉันเปิดไฟล์ CSV ใน Numbers มัน "แปลงเป็นประโยชน์" จะแปลงฟิลด์ที่รับรู้เป็นตัวเลขโดยการดึงศูนย์นำหน้าการแปลงสิ่งที่จำเป็นวันที่ ฯลฯ

ใช้ตัวอย่างเช่นคุณพิมพ์รหัส UPC ลงเบอร์สเปรดชีต005566778899หมายเลขอัตโนมัติจะแปลงที่5566778899 นี่ไม่ใช่สิ่งที่ฉันต้องการ ...

อย่างไรก็ตามวิธีที่ฉันใช้ Numbers ฉันเปิดฐานข้อมูลด้วยรหัส UPC นับพันด้วยศูนย์ก่อนหน้า บางคนยังมีวันที่ซึ่งตัวเลขจะจัดรูปแบบใหม่ โดยทั่วไปฉันไม่ต้องการฟีเจอร์ใด ๆ เหล่านี้ฉันต้องการให้เนื้อหาของฉันอยู่คนเดียว

ฉันจะรับเบอร์ให้เก็บข้อมูลของฉันไว้ได้อย่างไรเมื่อฉันเปิดไฟล์ CSV

การแปลงฟิลด์เป็นข้อความหลังจากนำเข้าจะไม่ช่วยให้ได้เนื่องจากข้อมูลมีระเบียบอยู่แล้ว ...


คุณหมายถึง "ข้อมูลถูกยุ่งเหยิงไปแล้ว" คุณหมายถึงการแปลงเป็นข้อความหลังจากเปิดไฟล์หรือไม่
Daniel

เมื่อเปิดไฟล์ทั้ง Excel และ Numbers จะเปลี่ยนแปลงข้อมูลของคุณทั้งหมด ดังนั้นสิ่งที่ฉันต้องทำฉันต้องทำก่อนที่จะเปิดไฟล์
henryaaron

7 ปีต่อมาสิ่งนี้ดูเหมือนจะยังเป็นช่องโหว่อยู่ เป็นปัญหาที่การไปกลับจาก csv -> Numbers -> csv แก้ไขเซลล์ ค่าศูนย์นำหน้าเป็นตัวอย่างที่ดี อีกอันคือเปอร์เซ็นต์ (เช่น 20% กลายเป็น 0.2) อีกอันหนึ่งคือสัญกรณ์ทางวิทยาศาสตร์ (เช่น 1E-2 กลายเป็น 0.01) การใส่เครื่องหมายอัญประกาศคู่ไม่ได้ช่วยอะไรและการแปลหน้าด้วยเครื่องหมายอัญประกาศเดี่ยวจะตีความอย่างแท้จริง ฉันคิดว่าตัวเลือกที่ดีที่สุดอาจเป็นคำนำหน้าทุกอย่างด้วยเครื่องหมายอัญประกาศเดี่ยวก่อนที่จะนำเข้าและตัดเครื่องหมายวรรคตอนเริ่มต้นทั้งหมดออกหลังจากส่งออก ...
Heath Raftery

คำตอบ:


7

หากฟิลด์ในไฟล์ CSV เริ่มต้นด้วยเครื่องหมายวรรคตอน ( ') ทั้ง Excel และ Numbers จะถือว่าฟิลด์เป็นข้อความและไม่แสดงผลด้วยการจัดรูปแบบตัวเลขใด ๆ

ดูเหมือนว่าไฟล์ CSV ของคุณจะพยายามบังคับให้แสดงข้อความผ่านการใส่หมายเลขฟิลด์ในเครื่องหมายคำพูดคู่ แต่ Numbers และ Excel ดูเหมือนจะไม่ใช้คำใบ้ว่าควรใช้ตัวเลขคำพูดคู่เป็นสตริง เคล็ดลับน่าจะเป็นการแก้ไขไฟล์ CSV ดังนั้นพวกเขาจึงใช้เคล็ดลับ "เริ่มต้นด้วยเครื่องหมายอัญประกาศเดี่ยว" แทนที่จะเป็น "เคล็ดลับที่อยู่ในเครื่องหมายคำพูดคู่" สำหรับฟิลด์ตัวเลข แต่เก็บเครื่องหมายคำพูดคู่สำหรับช่องข้อความที่เกี่ยวข้องกับเครื่องหมายวรรคตอน (รวมถึงเครื่องหมายจุลภาค เครื่องหมายคำพูดการขึ้นบรรทัดใหม่ ฯลฯ )

ในการประมวลผลไฟล์ CSV ของคุณคุณสามารถสร้างแอปพลิเคชัน Automator ได้

ใน Automator ให้สร้างแอปพลิเคชันใหม่

มันจะมีการกระทำเดียว: เรียกใช้ Shell Script (ผ่านอินพุตเป็นอาร์กิวเมนต์) นี่คือสคริปต์:

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

บันทึกแอปพลิเคชันที่เป็นผลลัพธ์บนเดสก์ท็อปของคุณ วางไฟล์ CSV ใด ๆ ที่คุณต้องการใช้ใน Numbers บนไอคอนแอปพลิเคชันและพวกเขาจะถูกแปลงดังนั้น Numbers ควรเก็บตัวเลขในฟิลด์เป็นตัวเลขตามตัวอักษรและไม่จัดรูปแบบหรือทิ้งข้อมูล

สำรองข้อมูลของคุณก่อนลองทำเช่นนี้ มีความเป็นไปได้ที่สตริงที่สร้างขึ้นโดยเฉพาะอย่างยิ่งในเขตข้อมูลบันทึกสามารถสลัดผลลัพธ์ที่นี่

ป้อนคำอธิบายรูปภาพที่นี่


การทำให้งานนี้ดูเหมือนว่าต้องมีการโต้ตอบ การสนทนานี้จะเกิดขึ้นในการแชท
Daniel

0

โดยเฉพาะนี่คือวิธีการจัดการศูนย์ชั้นนำ ฉันคิดว่าคำถามของคุณเกี่ยวกับการจัดรูปแบบเซลล์มากกว่าการแก้ไขอัตโนมัติ

ตามที่ได้กล่าวถึงคุณสมบัติการแก้ไขอัตโนมัติเองนั้นเป็นรายการระบบและจำเป็นต้องปิดการใช้งานจากการตั้งค่าระบบ


แปลงเซลล์ในรูปแบบนี้จะไม่ช่วยเหลือเนื่องจากข้อมูลที่ถูก messed แล้วกับ ...
henryaaron

1
ฉันคาดว่าศูนย์จะกลับมาถ้าคุณจัดรูปแบบเซลล์ - ถ้าตัวเลขลบศูนย์เหล่านั้นแบบไม่ทำลายเพื่อนำเข้าที่จะดูดอย่างแท้จริง บางทีคุณอาจต้องจัดรูปแบบเซลล์ก่อนนำเข้า
Adam Eberbach

มันแน่นอนที่สุด
henryaaron

0

Huzzah ขอบคุณคำตอบนี้และอื่น ๆ ตอนนี้มีวิธีการที่มีประโยชน์ดังต่อไปนี้:

  • ทำงานได้ใน Excel เช่นเดียวกับตัวเลข
  • สามารถเป็นแบบอัตโนมัติได้
  • มองไม่เห็นเป็นตัวเลข
  • สร้างไฟล์ CSV ที่ไม่มีผลกระทบจากการนำเข้าเพื่อส่งออก

เคล็ดลับคือการไม่นำหน้าแต่ละเขตที่มีเครื่องหมายวรรคตอนหรือห่อในราคาคู่ แต่คำนำหน้าด้วยและต่อท้ายด้วย=" "ในการนำเข้าเบอร์ถือว่าเนื้อหาของฟิลด์เป็นสตริงและในการส่งออกมันจะลดลงคำนำหน้าและคำต่อท้าย

ต่อไปนี้เป็นสายการบินหนึ่งที่สะดวกสบายที่ประมวลผลไฟล์ล่วงหน้าmy.csv:

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

เป็นครั้งแรกที่sedทำให้="ในช่วงเริ่มต้นของแต่ละบรรทัด, การเปลี่ยนแปลงในแต่ละจุลภาคไปแล้วปิดให้บริการแต่ละบรรทัด",=" "ครั้งที่สองsedจะดึงฟิลด์ที่ว่างออกเพราะตัวเลขทำให้เกิดช่องว่าง ในที่สุดก็เขียนไฟล์ที่เรียกtmp.csvว่าสามารถคลิกหรือส่งผ่านไปopenยังนำเข้าสู่เบอร์

ในทางปฏิบัติสิ่งนี้จะทำให้ฟิลด์ใด ๆ คุณอาจจะดีกว่าเพียงการตัดฟิลด์เหล่านั้นที่ขึ้นต้นด้วยตัวเลข แต่คุณต้องระวังการเริ่มต้นและสิ้นสุดของแต่ละบรรทัดและนิพจน์ทั่วไปของคุณ สิ่งนี้จะทำใน macOS:

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

นั่นคือตรงกับจุดเริ่มต้นของบรรทัดหรือเครื่องหมายจุลภาคตัวเลขแล้วจำนวนอักขระใด ๆ ที่ไม่ใช่เครื่องหมายจุลภาคแล้วจุดสิ้นสุดของบรรทัดหรือเครื่องหมายจุลภาคอื่น แทนที่ด้วยจุดเริ่มต้นและจุดสิ้นสุดเหมือนกัน แต่มีบิตกลางห่อและ=""

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.