私はCSVファイルを解析し、そのデータを構造体に配置しています。私はthis questionからTextFieldParser
を使用しています。それはString[]
を返す以外は魅力的です。現在、私は醜いの過程いますstructをString []で埋めますか?
String[] row = parser.ReadFields();
DispatchCall call = new DispatchCall();
if (!int.TryParse(row[0], out call.AccountID)) {
Console.WriteLine("Invalid Row: " + parser.LineNumber);
continue;
}
call.WorkOrder = row[1];
call.Description = row[2];
call.Date = row[3];
call.RequestedDate = row[4];
call.EstStartDate = row[5];
call.CustomerID = row[6];
call.CustomerName = row[7];
call.Caller = row[8];
call.EquipmentID = row[9];
call.Item = row[10];
call.TerritoryDesc = row[11];
call.Technician = row[12];
call.BillCode = row[13];
call.CallType = row[14];
call.Priority = row[15];
call.Status = row[16];
call.Comment = row[17];
call.Street = row[18];
call.City = row[19];
call.State = row[20];
call.Zip = row[21];
call.EquipRemarks = row[22];
call.Contact = row[23];
call.ContactPhone = row[24];
call.Lat = row[25];
call.Lon = row[26];
call.FlagColor = row[27];
call.TextColor = row[28];
call.MarkerName = row[29];
構造体は、アカウントIDがint
ことを除き、すべてのそれらのフィールドがString
のもので構成されています。それは強く型付けされていないと私を悩ませるものですが、今のところそれを見てみましょう。 parser.ReadFields()
はString[]
を返すことを指定された配列内の値と(おそらくint
なっする必要ようrow[0]
などのいくつかの値を変換)構造体を充填するためのより効率的な方法がありますか?
**編集:** 1つの制限は、この構造体が[Serializable]
であり、どこか別の場所でTcpに送信されるというソリューションの種類に影響を与えることを忘れていました。
反射を使用します。 – Grozz
リフレクションは間違いなく効率が悪く、ちょうどそれと一緒に暮らしています – RobJohnson
CsvHelperはあなたに非常に役立つかもしれません。https://github.com/JoshClose/CsvHelper/wiki/Basics – KeesDijk