0

私はC#が初めてです。データが欠落しているデータセットを読み込もうとしています。ヘッダーを読み取った後、次を使用してファイルの残りを読み取ります。

List<int> idList = new List<int>();
List<int[]> valList = new List<int[]>();
string line = sr.ReadLine();
while (line != null)
{
    string[] lineParts = line.Split(delimiters);
    int id = Convert.ToInt32(lineParts[0]);
    idList.Add(id);

    int[] vals = new int[numTests];
    for (int i = 0; i < numTests; i++)
    {
        vals[i] = Convert.ToInt32(lineParts[i + 1]);
    }
    valList.Add(vals);
    line = sr.ReadLine();
}
childIDs = idList.ToArray();
int[][] values = valList.ToArray();

これを実行すると、「入力文字列の形式が正しくありませんでした」というエラー メッセージが表示されます。欠落しているデータを読み取る方法がよくわかりません。助言がありますか?ありがとう

4

2 に答える 2

0

「入力文字列が正しい形式ではありません」とは、意味のない文字列から int を解析しようとしていることを意味します。

例えば:

Convert.ToInt32("the letter q"); // this will throw that exception.
于 2013-02-08T17:07:33.747 に答える
0

null 許容整数を使用して、欠損データがあるかどうかを追跡できます。また、InvalidFormatException を回避するために、Convert.ToInt32 の代わりに int.TryParse を使用することを検討してください。例:

List<int> idList = new List<int>();
List<int?[]> valList = new List<int?[]>();
string line;
while (null != (line = sr.ReadLine()))
{
    string[] lineParts = line.Split(delimiters);
    int id = Convert.ToInt32(lineParts[0]);
    idList.Add(id);

    int?[] vals = new int?[numTests];
    for (int i = 0; i < numTests; i++)
    {
        int parsed;
        if (!int.TryParse(lineParts[i + 1], out parsed))
            vals[i] = null;
        else
            vals[i] = parsed;
    }
    valList.Add(vals);
    line = sr.ReadLine();
}
childIDs = idList.ToArray();
var values = valList.ToArray();
于 2013-02-08T17:14:10.803 に答える