我希望將 csv 檔案的內容放入字典中:
public IDictionary<string, string> allContracts = new Dictionary<string, string>();
我想知道如何做到這一點,因為我試圖找到使用 csv 決議器的方法但是找不到有效的方法。我希望代碼在其中運行:
public void CheckAvailability()
{
//this runs following a click even in a different section of my code
}
以下是我要操作的 csv 檔案中的一些示例資料:
Vehicle ID,Customer ID,Booked Date,Booked_date_week_number,Number of Days Booked,BookingStatus
135,CU1,1-Jul-19,27,0,Booked
71,CU2,1-Jul-19,27,0,Booked
73,CU3,1-Jul-19,27,0,Booked
93,CU4,1-Jul-19,27,0,Booked
137,CU5,1-Jul-19,27,0,Booked
24,CU6,1-Jul-19,27,0,Booked
如您所見,列名也包含在 csv 檔案中,這不是問題,實際上是我正在創建的程式的基礎。
另請注意,我認為我需要使用 csv 決議器,因為正在使用的檔案比這里顯示的要大,所以我不想遇到記憶體問題。
uj5u.com熱心網友回復:
我會以不同的方式處理這個問題,通過創建一個代表每一行的類,并在需要時從中創建一個字典
void Main()
{
// See https://joshclose.github.io/CsvHelper/
using (var reader = new StreamReader(@"C:\Temp\Bookings.csv"))
using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
{
var records = csv.GetRecords<Booking>();
var dictionary = records.ToDictionary(r => r.VehicleID, r => r);
}
}
public enum BookingStatus
{
Booked,
// TOOD: Add other statuses
}
public class Booking
{
[Name("Vehicle ID")]
public int VehicleID { get; set; }
[Name("Customer ID")]
public string CustomerID { get; set; }
[Name("Booked Date")]
public DateTime BookedDate { get; set; }
[Name("Booked_date_week_number")]
public int BookedDateWeekNumber { get; set; }
[Name("Number of Days Booked")]
public int NumberOfDaysBooked { get; set; }
[Name("BookingStatus")]
public BookingStatus BookingStatus { get; set; }
}
請注意,如果同一車輛 ID 在 CSV 檔案中出現多次,則使用車輛 ID 作為字典中的鍵會失敗。您可能會發現創建一個陣列或串列更有用,然后您可以根據需要使用 Linq 進行查詢,例如替換創建字典的行
var dictionary = records.ToDictionary(r => r.VehicleID, r => r);
和
var csvData = records.ToArray();
然后你可以做類似的事情
var bookingsForVehicle = csvData.Where(d => d.VehicleID == 42);
呼叫 .ToArray() 或 .ToList() 之類的方法的原因是為了避免多次列舉結果,這會導致檔案被多次決議。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/409988.html
標籤:
上一篇:使用htaccess在laravel中將http://重定向到https://時如何洗掉url中的“public”?
