แยกคอลัมน์เฉพาะออกจากไฟล์ CSV

เมื่อฉันรันโค้ดนี้ มันต้องใช้ 11 องค์ประกอบในการวนซ้ำครั้งแรก ในการวนซ้ำครั้งที่สอง จะลดลงเหลือ 6 องค์ประกอบ และสุดท้ายต้องใช้ 1 องค์ประกอบ จากนั้นจะแสดง "ข้อยกเว้นอาร์เรย์ที่อยู่นอกช่วง"

ผมทำอะไรผิดหรือเปล่า?

foreach (string line in File.ReadLines(Path))
{  
    string [] column = line.Split(',');
    if (id == column[4])
    {
        return false;
    }
    Array.Clear(column, 0, column.Length);
}

person Ali Elegant    schedule 04.12.2013    source แหล่งที่มา
comment
ข้อมูลที่คุณป้อนมีลักษณะอย่างไร idคืออะไร? สมมติว่า id เป็นสตริงประเภทใดประเภทหนึ่ง IIRC คุณไม่สามารถเปรียบเทียบ id และ column[4] ใน c# ได้ มีฟังก์ชันให้ทำเช่นนั้น (compare(id, column[4]) อาจจะ?)   -  person KevinDTimm    schedule 05.12.2013
comment
คุณหมายถึง CSV ใช่หรือไม่? ถ้าไม่ CSF คืออะไร?   -  person Yuck    schedule 05.12.2013
comment
คุณได้ตรวจสอบว่าไฟล์ CSV ของคุณมี 11 คอลัมน์ในทุกแถวหรือไม่   -  person Suresh    schedule 05.12.2013
comment
ก่อนอื่น มีอะไรผิดปกติกับสิ่งที่คุณอธิบายไว้ ข้อยกเว้นดูเหมือนชัดเจนแต่ก็ไม่ชัดเจนว่ามีบางอย่างผิดปกติกับรูปแบบ 11-6-1 หรือไม่   -  person Austin Salonen    schedule 05.12.2013
comment
ฉันต้องใช้เวลา 11 เสมอ ฉันไม่รู้ว่าทำไมอาเรย์จึงลดเหลือ 6 แล้ว 1 ???   -  person Ali Elegant    schedule 05.12.2013
comment
แนวคิดเบื้องหลัง Array.Clear call คืออะไร? คอลัมน์จะถูกกำหนดอีกครั้งในการวนซ้ำแต่ละครั้งของ foreach   -  person Mauricio Gracia Gutierrez    schedule 05.12.2013
comment
ฉันแค่พยายามล้างอาเรย์ แต่มันให้ข้อผิดพลาดเดียวกันโดยไม่มี Array.clear   -  person Ali Elegant    schedule 05.12.2013
comment
ไอดีมีค่าเท่าไหร่? วิธีการนี้กำลังทำอะไร? คุณแค่พยายามคว้าค่าที่ 4 ใน 11 ค่าที่อ่านมาใช่หรือไม่ จุดประสงค์ในการส่งคืนเท็จคืออะไร? ฉันสามารถช่วยได้ แต่ฉันไม่รู้จริงๆ ว่าคุณกำลังพยายามทำอะไรให้สำเร็จที่นี่   -  person Josh    schedule 05.12.2013
comment
ฉันต้องจับคู่ id ซึ่งเป็นค่า int กับคอลัมน์ที่สี่ในไฟล์ myu csv และฉันคิดว่า @sthotakura ถูกต้อง... คำตอบของเขาคือ: คุณตรวจสอบว่าไฟล์ CSV ของคุณมี 11 คอลัมน์ในทุกแถวหรือไม่   -  person Ali Elegant    schedule 05.12.2013


คำตอบ (2)


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

โดยคอลัมน์ที่ 4 คุณหมายถึงคอลัมน์ที่ดัชนี 4 หรือไม่ หรือคุณหมายถึงคอลัมน์ที่ 4 ซึ่งอยู่ที่ดัชนี 3?

private bool SomeMethod(String path, String id)
{
    string [] column ;

    foreach (string line in File.ReadLines(Path))
    {  
        column = line.Split(',');

        //check that there are at least 5 columns before comparing it with ID
        if ((column.Length >= 5) && (id == column[4]))
        {
            return false;
        }
    }
}
person Mauricio Gracia Gutierrez    schedule 04.12.2013
comment
ดัชนีอยู่ที่สี่และคอลัมน์อยู่ที่ห้า - person Ali Elegant; 05.12.2013

หากคุณบอกว่า line มีเพียง 1 องค์ประกอบในการวนซ้ำครั้งที่ 3 คุณสร้าง column = line.Split(',') คอลัมน์จะมี 1 องค์ประกอบ ดังนั้น ณ จุดนั้นคอลัมน์ [4] จึง "อยู่นอกช่วง" เนื่องจากอาร์เรย์สตริงมีองค์ประกอบเดียวเท่านั้น

คุณกำลังพยายามทำอะไรกับเรื่องนี้กันแน่ เพื่อให้เราสามารถให้คำตอบแก่คุณได้ดีกว่าข้อยกเว้น

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

foreach (string line in File.ReadLines(Path))
{  
    string [] column = line.Split(',');
    if (column.Count() >= 5 && column.id == column[4])
    {
        return false;
    }
}

สิ่งนี้จะช่วยให้แน่ใจว่าคุณมีองค์ประกอบอย่างน้อย 5 รายการในอาร์เรย์คอลัมน์ของคุณก่อนที่คุณจะพยายามเข้าถึงคอลัมน์องค์ประกอบที่ 5[4] ใน == ตรวจสอบ

person Josh    schedule 04.12.2013
comment
ฉันต้องจับคู่ id กับคอลัมน์ที่ 4 - person Ali Elegant; 05.12.2013
comment
จากที่คุณพูดครั้งที่ 3 ผ่านคอลัมน์มีเพียง 1 องค์ประกอบเท่านั้น คอลัมน์ [4] หมายถึงองค์ประกอบที่ 5 ในคอลัมน์อาร์เรย์สตริง แต่กลับไปที่สิ่งที่คุณพูด มีเพียง 1 องค์ประกอบ หมายความว่า column[0] เป็นองค์ประกอบเดียวในอาร์เรย์ นี่คือสิ่งที่ทำให้เกิดข้อยกเว้นของคุณ เราจำเป็นต้องรู้ว่า id มีหรือควรจะประกอบด้วยอะไร อาจเป็นไปได้ว่าข้อมูลที่คุณป้อนจะมีลักษณะอย่างไร และอาจมีวิธีการมากกว่านี้ใน foreach นี้ วิธีการที่มีอยู่ในนี้ควรจะทำคืออะไร? - person Josh; 05.12.2013
comment
ฉันเพิ่งดีบั๊กและตรวจสอบแล้ว id คือตัวเลขและคอลัมน์ [4] มี id ในไฟล์ csv ของฉัน ดังนั้นฉันต้องจับคู่ id ทุกแถวในไฟล์ csv ของฉันไปยังคอลัมน์ที่สี่ เข้าใจประเด็นของฉันไหม? - person Ali Elegant; 05.12.2013