2

TextReaderを使用して、タブ区切りファイルの各行を読み取ります。読み取った行ごとに、タブを分割して文字列配列にデータを入力します。次に、文字列配列内の特定の位置にアクセスして値を取得できます。

これは、次のような文字列に最適です。userWorkload.SSN = arrColumns [0];
ただし、実行時に列の1つをintに変換しようとすると、エラーメッセージが表示されます。userWorkload.contactHours= Convert.ToInt32(arrColumns [9]);

これが私のコードです:

List<UserWorkload> userWorkloads = new List<UserWorkload>();
TextReader tr = File.OpenText("fall11-tab.txt");
string strLine = string.Empty;
string[] arrColumns = null;
while ((strLine = tr.ReadLine()) != null)
{
     UserWorkload userWorkload = new UserWorkload();

     arrColumns = strLine.Split('\t');
     userWorkload.SSN = arrColumns[0];
     userWorkload.contactHours = Convert.ToInt32(arrColumns[9]);     

     userWorkloads.Add(userWorkload);
 }

UserWorkloadクラスには、単純なゲッター/セッターが含まれています。

class UserWorkload 
{
     public string SSN { get; set; }
     public int contactHours { get; set; }
}

これが私のエラーです:
未処理の例外:System.FormatException:入力文字列が正しい形式ではありませんでした。 System.Number.ParseInt32(String s、NumberStyles style、NumberFormatInfo info) at System.Convert.ToInt32(String value) at Snyder5Creator
at System.Number.StringToNumber(String str、NumberStyles options、NumberBuffer&number、NumberFormatInfo info、Boolean parseDecimal) at Snyder5Creator .InputFileReader.buildRowList()in C:\ Users \ baxter.NET \ Documents \ Visual Studio 2010 \ Projects \ User5Creator \ User5Creator \ InputFileReader.cs:line 31 at Snyder5Creator.Program.Main(String [] args)in C:\ Users \ baxter.NET \ Documents \ Visual Studio 2010 \ Projects \ User5Creator \ Snyder5Creator \ Program.cs:line 24



31行目は次のとおりです。userWorkload.contactHours=Convert.ToInt32(arrColumns [9]);

これに関する助けをいただければ幸いです。

4

2 に答える 2

2

1つ以上のレコードに無効なデータが含まれている可能性があります。これらのエラーを無視しても問題がない場合は、int.TryParseを使用できます。

 int parsedNumber;
 userWorkload.contactHours = int.TryParse(arrColumns[9], out parsedNumber) ? parsedNumber : -1;
于 2012-05-14T20:05:37.607 に答える
1

これもトライキャッチで包みます。

List<UserWorkload> userWorkloads = new List<UserWorkload>();
TextReader tr = File.OpenText("fall11-tab.txt");
string strLine = string.Empty;
string[] arrColumns = null;
while ((strLine = tr.ReadLine()) != null)
{
     UserWorkload userWorkload = new UserWorkload();

     arrColumns = strLine.Split('\t');
     userWorkload.SSN = arrColumns[0];
     if(!int.TryParse(arrColumns[9], out userWorkload.contactHours)
     {
        //Throw something like InvalidArgumentException here or set to a safe value (-1?)
     }     

     userWorkloads.Add(userWorkload);
 }
于 2012-05-14T20:06:21.000 に答える