มีวิธีในการรวมเครื่องหมายจุลภาคในคอลัมน์ CSV โดยไม่แบ่งรูปแบบหรือไม่


283

ฉันมี CSV สองคอลัมน์พร้อมชื่อและตัวเลข ตัวอย่างเช่นชื่อของคนใช้จุลภาคJoe Blow, CFA.คอมมาคอมม่าคอมม่านี้แบ่งรูปแบบ CSV เนื่องจากถูกตีความว่าเป็นคอลัมน์ใหม่

ฉันได้อ่านแล้วและใบสั่งยาที่พบบ่อยที่สุดดูเหมือนว่าจะแทนที่ตัวละครนั้นหรือแทนที่ตัวคั่นด้วยค่าใหม่ (เช่นthis|that|the, other)

ฉันต้องการเก็บเครื่องหมายจุลภาคคั่น (ฉันรู้ว่า excel สนับสนุนตัวคั่นอื่น แต่ล่ามอื่นอาจไม่) ฉันต้องการเก็บเครื่องหมายจุลภาคในชื่อตามที่Joe Blow| CFAดูโง่ ๆ

มีวิธีในการรวมเครื่องหมายจุลภาคในคอลัมน์ CSV โดยไม่แบ่งรูปแบบตัวอย่างเช่นโดยการหนีออกมาหรือไม่?



แฮ็คเล็ก ๆ น้อย ๆ ที่เหมาะกับฉัน: เปิดไฟล์ csv ในเท็กซ์เอดิเตอร์จากนั้นวางลงในเอกสาร excel ใช้งานได้ถ้าคุณสามารถทำสิ่งนี้ได้ในกลุ่มก้อนใหญ่
Jonas

@ Jonas: Excel ไม่สามารถคาดเดาได้ว่าจะใช้โทเค็นเดียวกันเป็นตัวคั่นหรือเป็นส่วนหนึ่งของข้อมูล การวางจากโปรแกรมแก้ไขข้อความจะไม่เปลี่ยนแปลง
IIsspectable

คำตอบ:


373

ใส่ฟิลด์ในเครื่องหมายคำพูดเช่น

field1_value,field2_value,"field 3,value",field4, etc...

ดูวิกิพีเดีย

อัปเดต :

การเข้ารหัสอ้างใช้"สัญลักษณ์คำพูดหนึ่งคู่ในสนามจะถูกเข้ารหัสเป็นและข้อมูลทั้งหมดจะกลายเป็น"" """"ดังนั้นหากคุณเห็นสิ่งต่อไปนี้ในเช่น Excel:

---------------------------------------
| regular_value |,,,"|  ,"", |"""   |"|
---------------------------------------

ไฟล์ CSV จะมี:

regular_value,",,,""",","""",","""""""",""""

เครื่องหมายจุลภาคจะห่อหุ้มเพียงแค่ใช้คำพูดเพื่อให้กลายเป็น,","

เครื่องหมายจุลภาคและอ้างความต้องการที่จะห่อหุ้มและที่ยกมาเพื่อให้กลายเป็น ","""","""


4
สิ่งนี้ได้ผลสำหรับฉัน! ฉันกำลังส่งออกตัวแปร js เป็น CSV และการใส่เครื่องหมายอัญประกาศคู่เพิ่มรอบ ๆ สตริงช่วยแก้ไขปัญหาของ "John Blow, CFA" ตามที่กล่าวไว้ในคำถาม
Madhulika Mukherjee

จะเกิดอะไรขึ้นถ้ามีทั้งเครื่องหมายคำพูดและเครื่องหมายจุลภาคในแต่ละเซลล์
speedplane

2
ฉันอัปเดตคำตอบด้วยตัวอย่าง - ในระยะสั้นเครื่องหมายจุลภาคถูกห่อหุ้มด้วยเครื่องหมายคำพูด (เช่น",") และเครื่องหมายคำพูดจะถูกหลบหนี (เช่น""")
Ryan

6
ตอนนี้ควรเป็นคำตอบที่ได้รับการยอมรับเนื่องจากเสนอทางออกที่ยอดเยี่ยมซึ่งน่าจะแก้ปัญหากรณีใช้งานได้ 99%
BuZz

มีห้องสมุด C # ในการแยกวิเคราะห์ไฟล์ csv ที่มีเขตข้อมูลที่มีเครื่องหมายคำพูดหรือไม่?
Minh Tran

34

ปัญหาเกี่ยวกับรูปแบบ CSV ไม่ใช่สเป็คเดียวมีวิธีการที่ยอมรับหลายวิธีโดยไม่มีวิธีแยกแยะสิ่งที่ควรใช้ (สำหรับสร้าง / ตีความ) ผมพูดทุกวิธีที่จะหลบหนีตัวละคร (การขึ้นบรรทัดใหม่ในกรณีที่ว่า แต่ขั้นพื้นฐานเดียวกัน) ในโพสต์อื่น โดยพื้นฐานแล้วจะเป็นการใช้กระบวนการสร้าง / หลบหนี CSV สำหรับผู้ใช้ที่ต้องการและหวังว่าคนที่เหลือจะไม่สนใจ

เอกสารอ้างอิงข้อมูลจำเพาะ


10
RFC 4180, รูปแบบทั่วไปและประเภท MIME สำหรับไฟล์ค่าคั่นด้วยจุลภาค (CSV), ietf.org/rfc/rfc4180.txt ; อีกหนึ่งคุณสมบัติ 'เป็นทางการ'
Shi

3
การรวมวิธีการที่ได้รับการยอมรับอย่างกว้างขวางมากที่สุดจะทำให้คำตอบนี้ยอดเยี่ยม คำตอบโดย @Ryan จะชนะ
rinogo

16

ถ้าคุณต้องการที่จะพูดว่าคุณสามารถใช้คำพูด บางสิ่งเช่นนี้

$name = "Joe Blow, CFA.";
$arr[] = "\"".$name."\"";

ดังนั้นตอนนี้คุณสามารถใช้เครื่องหมายจุลภาคในชื่อตัวแปรของคุณ


ขอบคุณ Cloud สำหรับเคล็ดลับของคุณนั่นเป็น: $whatever = "\"".$name."\"";
washere

ขอบคุณสำหรับการแก้ปัญหา
Bhavin Thummar

10

คุณต้องอ้างถึงค่านั้น
นี่คือข้อกำหนดรายละเอียดเพิ่มเติม


2
มีหลายสเปค Excel ใช้เครื่องหมายคำพูดล้อมรอบรายการ Linux ใช้อักขระเครื่องหมายทับขวา น่าเสียดายที่คุณต้องหลบหนีสำหรับผู้ชม / ระบบเป้าหมาย
Rudu

7

นอกจากประเด็นในคำตอบอื่น ๆ : สิ่งหนึ่งที่ควรทราบหากคุณใช้เครื่องหมายคำพูดใน Excel คือตำแหน่งของช่องว่างของคุณ หากคุณมีรหัสเช่นนี้:

print '%s, "%s", "%s", "%s"' % (value_1, value_2, value_3, value_4)

Excel จะถือว่าเครื่องหมายคำพูดเริ่มต้นเป็นเครื่องหมายคำพูดตามตัวอักษรแทนที่จะใช้เพื่อหลีกเลี่ยงเครื่องหมายจุลภาค รหัสของคุณจะต้องเปลี่ยนเป็น

print '%s,"%s","%s","%s"' % (value_1, value_2, value_3, value_4)

มันเป็นความละเอียดอ่อนที่พาฉันมาที่นี่


3

ฉันประสบปัญหาเดียวกันและการอ้างอิง,ไม่ได้ช่วย ในที่สุดผมแทนที่,ด้วย+เสร็จการประมวลผลการบันทึกการส่งออกเป็น OUTFILE และแทนที่ด้วย+ ,นี่อาจดูน่าเกลียด แต่มันใช้ได้สำหรับฉัน


2
และคุณจะทำอย่างไรถ้าข้อมูลมีอักขระ "+" อยู่
Andrew Morton

1
@AndrewMorton ใช่มันเป็นความท้าทาย แต่ในกรณีของฉันฉันแน่ใจว่า+ไม่มีอยู่ในข้อมูลของฉันเลย ขอบคุณสำหรับความคิดเห็นกรุณา
Mohammed

4
วิธีที่ง่ายและมีประสิทธิภาพคือการใส่สตริงในเครื่องหมายอัญประกาศคู่และยกเว้นเครื่องหมายคำพูดคู่ภายในสตริงโดยใช้สองสตริงดัง""กล่าว นี่เป็นวิธีปกติในการทำ
Andrew Morton

1
ถ้ามันไม่ทำงานให้ตรวจสอบว่าคุณไม่ได้สร้างช่องว่างข้างเครื่องหมายจุลภาค: "กบ", "สีเหลือง, สีเขียว" จะใช้งานได้ "กบ", "สีเหลือง, สีเขียว" จะไม่
Dazbert

โดยส่วนตัวแล้วฉันพบ @AndrewMorton ความคิดเห็นที่สองที่นี่จริงช่วยฉันเข้าใจสิ่งที่ทำดีกว่าคำตอบที่ยอมรับ ขั้นตอนที่ 1 - ยกเว้นเครื่องหมายคำพูดคู่ในช่องข้อมูลเช่นใน Python: field = field.replace('"', '""')ขั้นตอนที่ 2 - หลังขั้นตอนที่ 1 ให้ล้อมฟิลด์ด้วยเครื่องหมายคำพูดคู่เช่นfield = '"' + field + '"'- จากนั้นคุณคิดว่าจะนำแสดงโดยเหล็ก
Will Croxford

3

อาจมีวิธี to_json ทั้งนี้ขึ้นอยู่กับภาษาของคุณ มันจะหนีหลายสิ่งที่ทำลาย CSVs


3

ฉันพบว่าแอปพลิเคชั่นบางตัวเช่น Numbers ใน Mac ไม่สนใจเครื่องหมายคำพูดคู่หากมีช่องว่างอยู่ก่อนหน้า

a, "b,c"ไม่ทำงานในขณะที่a,"b,c"ทำงาน


1
คุณอาจช่วยฉันหนึ่งชั่วโมงในการทำงาน ... ขอบคุณ!
Shaun314

1

คุณสามารถเข้ารหัสค่าของคุณตัวอย่างเช่นใน PHP base64_encode ($ str) / base64_decode ($ str)

IMO นี้ง่ายกว่าการเพิ่มคำพูดเป็นสองเท่าเป็นต้น

https://www.php.net/manual/en/function.base64-encode.php

ค่าที่เข้ารหัสจะไม่มีเครื่องหมายจุลภาคดังนั้นทุกเครื่องหมายจุลภาคใน CSV ของคุณจะเป็นตัวคั่น



0

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


0

ก่อนอื่นหากมูลค่ารายการมีอักขระเครื่องหมายคำพูดคู่ (") ให้แทนที่ด้วยอักขระเครื่องหมายคำพูดคู่ 2 ตัว (" ")

item = item.ToString().Replace("""", """""")

สุดท้ายห่อค่ารายการ:

ON LEFT: ด้วยอักขระเครื่องหมายคำพูดคู่ (")

ด้านขวา: ด้วยอักขระเครื่องหมายคำพูดคู่ (") และอักขระจุลภาค (,)

csv += """" & item.ToString() & ""","

0

\"ราคาคู่ไม่ได้ทำงานสำหรับฉันมันทำงานให้ฉัน หากคุณต้องการใส่เครื่องหมายคำพูดคู่เป็นตัวอย่างคุณสามารถตั้งค่าได้\"\"ได้

คุณสามารถสร้างสูตรได้เช่น:

fprintf(strout, "\"=if(C3=1,\"\"\"\",B3)\"\n");

จะเขียนใน csv:

= IF (C3 = 1 "", B3)


0

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

กันยายน = |

ที่ไหน | เป็นตัวคั่นที่คุณต้องการให้ Excel ใช้ อีกวิธีหนึ่งคุณสามารถเปลี่ยนตัวคั่นเริ่มต้นใน Windows แต่ใช้เวลาค่อนข้างนาน:

แผงควบคุม> นาฬิกา & ภูมิภาค> ภูมิภาค> รูปแบบ> เพิ่มเติม> หมายเลข> ตัวคั่นรายการ [เปลี่ยนจากเครื่องหมายจุลภาคเป็นตัวเลือกที่คุณต้องการ] นั่นหมายความว่า Excel จะใช้ค่าเริ่มต้นในการส่งออก CSV โดยใช้ตัวคั่นที่เลือก

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