3

文字列配列のリストがあります:

List<string[]> parsedRaw = new List<string[]>();

このリストには、CSV から読み取られた行が含まれています。parsedRaw[3][5] は、CSV の 3 行目から読み取られた 5 番目の項目になります。

リスト内の行数を次のように見つけることができることを知っています。

parsedRaw.Count

しかし、行が与えられた場合、その行の要素の数を見つけるにはどうすればよいでしょうか? 「インデックスが配列の境界外にありました」というエラーを回避するために、リストから読み取るループに入る前にテストを実装しようとしています。ループは次のとおりです。

for (k = 0; k < nBytes; k++)
{
    TheseBytes[k] = (byte)parsedRaw[i][StartInt + k];
}

他の要素より要素が少ない CSV の行でエラーが発生しています。このループに入る前に、parsedRaw[i] に少なくとも "StartInt + nBytes" 要素があるかどうかを確認する必要があります。

ご提案ありがとうございます。

4

3 に答える 3

6

行は単なる文字列配列であるため、配列のプロパティをstring[]使用してそのサイズを見つけることができます。Length

foreach (string[] row in parsedRaw) {
    for (int i = 0 ; i != row.Length ; i++) {
        // do something with row[i]
    }
}
于 2012-05-03T15:26:51.453 に答える
3

特定の行の要素数は、

parsedRaw[theRowIndex].Length

forループを修正するには、値を行の長さStartInt + kの最小値よりも小さくなるように制約する必要がありますnBytes

for (k = 0; (k < nBytes) && (k + StartInt < parsedRaw[i].Length); k++)
{
    TheseBytes[k] = (byte)parsedRaw[i][StartInt + k];
}
于 2012-05-03T15:28:12.337 に答える
1

試す

List<string[]> parsedRaw = new List<string[]>();
parsedRaw.Add(new string[] {"test1", "test2"});
parsedRaw.Add(new string[] { "test1", "test2", "test3" });
int totalSize = 0;
for (int i = 0; i < parsedRaw.Count(); i++)
{
    int rowSize = 0;
    for (int k = 0; k < parsedRaw[i].Count(); k++)
    {
        rowSize += parsedRaw[i][k].Length;    
    }                
    totalSize += rowSize;
}
于 2012-05-03T15:32:13.320 に答える