แทนที่ลูกน้ำด้วยเครื่องหมายอัฒภาคระหว่างโควต้า

ฉันมีไฟล์ csv ที่ใช้ดึงข้อมูลลงในตาราง ตัวอย่าง: "ABC",1,"Apple" ข้อกำหนดคือสตริงจะอยู่ภายในโควต้า " " และจำนวนเต็มจะต้องไม่มีเครื่องหมายคำพูด บรรทัดด้านบนจะแบ่งออกเป็นสามคอลัมน์ ฉันกำลังใช้คลาสตัวอ่านสตรีมเพื่อแยกบรรทัดออกเป็นคอลัมน์โดยใช้ line.split(',') มันทำงานได้ดี น่าเสียดายที่ฉันได้รับบันทึกในไฟล์ที่มีเครื่องหมายจุลภาคอยู่ระหว่างเครื่องหมายคำพูดเช่น "ABC,DEF,ghi",2,"Orange" ดังนั้นแทนที่จะเป็น 3 คอลัมน์ ตอนนี้พวกมันทำหน้าที่เป็น 5 คอลัมน์ และการแปลงทั้งหมดล้มเหลว ใครสามารถช่วยฉันในการเขียนสคริปต์ใน C # ซึ่งจะแทนที่ลูกน้ำระหว่างโควต้าเป็นอัฒภาคและอย่าแตะลูกน้ำที่อยู่ระหว่างคอลัมน์

ขอบคุณ


person lch    schedule 18.01.2012    source แหล่งที่มา
comment
คุณจะหลีกเลี่ยง " ในสตริงเหล่านั้นได้อย่างไร หรือคุณคาดหวังให้สตริงเหล่านั้นไม่มี " ได้อย่างไร   -  person Nappy    schedule 19.01.2012
comment
ไฟล์อาจมีการเปลี่ยนแปลง คุณอาจต้องการสร้าง enum ที่กำหนดเค้าโครงส่วนหัวของไฟล์ .. และตรวจสอบคอลัมน์เพิ่มเติมที่ฉันทำในโปรเจ็กต์ล่าสุดของฉัน ไม่เช่นนั้นคุณจะต้องตรวจสอบความยาวของแต่ละสตริงหลังจากทำ การแยกเนื่องจาก ABC, DEF, ghi ควรแบ่งออกเป็น 3 คอลัมน์แทนที่จะเป็น 1 คือคุณช่วยติดตามสิ่งที่ฉันกำลังพูดถึงได้ไหม .. จากนั้นคุณจะต้องเชื่อม DEF ghi เป็นส่วนหนึ่งของ ABC   -  person MethodMan    schedule 19.01.2012


คำตอบ (2)


ดูเหมือนว่า CSV ของคุณอาจสอดคล้องกับ RFC 4180 ใช้ตัวแยกวิเคราะห์ RFC 4180 หลายแห่งมีอยู่ ตรวจสอบอันนี้: http://www.codeproject.com/KB/database/CsvReader.aspx

person yankee    schedule 18.01.2012
comment
ฉันไม่ได้ใช้ parser ใด ๆ ฉันใช้สคริปต์ที่กำหนดเอง C# ในส่วนประกอบสคริปต์ใน ssis - person lch; 19.01.2012
comment
เหตุใดจึงมีแท็ก VB หากคุณใช้ C # - person ChrisPadgham; 19.01.2012

คำถามนี้มีคำตอบที่นี่: Java: การแยก สตริงที่คั่นด้วยเครื่องหมายจุลภาค แต่ไม่สนใจเครื่องหมายจุลภาคในเครื่องหมายคำพูด

คุณสามารถใช้นิพจน์ทั่วไปเดียวกัน ",(?=([^\"]*\"[^\"]*\")*[^\"]*$)" และใช้วิธี C# Regex.Split()

person Sean Dawson    schedule 18.01.2012
comment
สวัสดี ฉันไม่มีคลาส Regex ซึ่งใช้คำสั่งที่ฉันต้องใช้เพื่อให้ฉันเป็นมือใหม่ใน C# โปรดบอกฉันด้วย - person lch; 19.01.2012
comment
คุณมีคลาสนิพจน์ทั่วไป คุณจะต้องเพิ่ม using System.Text.RegularExpressions - person billinkc; 19.01.2012