Mengekstrak kolom tertentu dari file csv

Saat saya menjalankan kode ini dibutuhkan 11 elemen pada iterasi pertama. Pada iterasi kedua dikurangi menjadi 6 elemen dan pada iterasi terakhir dibutuhkan 1 elemen dan kemudian menampilkan "pengecualian array di luar jangkauan".

Apa yang saya lakukan salah?

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 sumber
comment
Seperti apa masukan Anda? Apa itu id? Dengan asumsi id adalah semacam string, IIRC, Anda tidak dapat membandingkan id dan column[4] di c#, ada fungsi untuk melakukan itu (compare(id, column[4]) mungkin?)   -  person KevinDTimm    schedule 05.12.2013
comment
Apakah maksud Anda CSV? Jika tidak, apa itu CSF?   -  person Yuck    schedule 05.12.2013
comment
Apakah Anda memeriksa apakah file CSV Anda memiliki 11 kolom di semua baris?   -  person Suresh    schedule 05.12.2013
comment
Pertama, apa yang salah dengan apa yang Anda uraikan? Pengecualiannya tampak jelas tetapi tidak terlihat apakah ada yang salah dengan pola 11-6-1.   -  person Austin Salonen    schedule 05.12.2013
comment
saya harus selalu mengambil 11. Saya tidak tahu mengapa arraynya berkurang menjadi 6 lalu 1 ???   -  person Ali Elegant    schedule 05.12.2013
comment
apa ide di balik panggilan Array.Clear? kolom ditugaskan lagi pada setiap iterasi foreach.   -  person Mauricio Gracia Gutierrez    schedule 05.12.2013
comment
saya baru saja mencoba mengosongkan array, tetapi memberikan kesalahan yang sama tanpa Array.clear   -  person Ali Elegant    schedule 05.12.2013
comment
berapa nilai idnya? Apa yang dilakukan metode ini? Apakah Anda hanya mencoba mengambil nilai ke-4 dari 11 nilai yang terbaca? Apa tujuan mengembalikan false? Saya dapat membantu tetapi saya benar-benar tidak tahu apa yang ingin Anda capai di sini.   -  person Josh    schedule 05.12.2013
comment
saya harus mencocokkan id yang merupakan nilai int dengan kolom keempat di file csv myu dan menurut saya @sthotakura benar... jawabannya adalah: Apakah Anda memeriksa apakah file CSV Anda memiliki 11 kolom di semua baris?   -  person Ali Elegant    schedule 05.12.2013


Jawaban (2)


Sudahkah Anda mencoba memastikan bahwa baris yang diperiksa memiliki kolom yang cukup?

Yang Anda maksud dengan kolom ke-4 adalah kolom di indeks 4? atau maksudnya kolom ke-4 yang ada di indeks 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
indeks di urutan keempat dan kolom di urutan kelima - person Ali Elegant; 05.12.2013

Jika Anda mengatakan baris hanya memiliki 1 elemen pada iterasi ke-3, maka Anda membuat kolom = baris. Split(','), kolom akan memiliki 1 elemen. jadi pada saat itu kolom[4] "di luar jangkauan" karena array string hanya memiliki satu elemen di dalamnya.

Apa sebenarnya yang Anda coba lakukan dengan ini, sehingga kami dapat memberikan jawaban yang lebih baik daripada sekadar pengecualian.

sunting: Jadi dengan komentar Anda yang harus Anda lakukan adalah melihat apakah kolom ke-5 cocok dengan apa yang ada di id dan mengembalikan false jika demikian?

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

ini akan memastikan Anda memiliki setidaknya 5 elemen dalam larik kolom Anda sebelum Anda mencoba mengakses kolom elemen ke-5[4] di tanda ==.

person Josh    schedule 04.12.2013
comment
saya harus mencocokkan id dengan kolom ke-4 - person Ali Elegant; 05.12.2013
comment
Dari apa yang Anda katakan, pada kolom ketiga kalinya hanya berisi 1 elemen. kolom[4] berarti elemen ke-5 dalam kolom array string. tetapi kembali ke apa yang Anda katakan, hanya ada 1 elemen, artinya kolom[0] adalah satu-satunya elemen dalam array. Inilah yang menyebabkan pengecualian Anda. Kita perlu tahu id apa yang berisi atau seharusnya berisi, mungkin seperti apa masukan Anda, dan mungkin lebih banyak lagi tentang metode yang memuat foreach ini. Metode apa yang seharusnya dilakukan oleh metode ini? - person Josh; 05.12.2013
comment
Saya baru saja men-debug dan memeriksa, id adalah angka dan kolom[4] berisi id di file csv saya jadi saya harus mencocokkan id dengan setiap baris di file csv saya ke kolom berikutnya. apakah kamu mengerti maksudku? - person Ali Elegant; 05.12.2013