我正在尋找指導,當我試圖用我的標題傳達時,我遇到了一個問題,我收到的資料有時看起來像這樣,例如:
entry[0] = "SHAPE", "X", "Y"
entry[1] = "Circle", "2", "3"
有時可能看起來像這樣:
entry[0] = "X", "Y", "SHAPE"
entry[1] = "2", "3", "Circle"
如您所見,它們是根據第一行值排序的,我將在下面將其稱為“headerValues”。我現在正在嘗試映射我的變數(例如“形狀”),以便將其放置在條目實際與形狀值相關的位置。我想這樣做是因為我計劃的輸入順序不同,因此我的“形狀”變數中不會出現 X 數字。
我也很清楚,我可能想在將第一行添加到我的形狀中之前洗掉它們,但這是我想嘗試自己弄清楚以便學習的問題。我來到這里只是因為我已經被這個問題困住了一段時間,因此真的很感謝我能從比我更有經驗的程式員那里得到任何幫助。
您將在下面找到代碼:
var csvRows = csvData.Split(';');
var headerValues = csvRows[0].Split(',');
List<Shapes> shapes = new List<Shapes>();
if (csvRows.Count() > 0)
foreach (var row in csvRows)
{
var csvColumn = row.Split(',').Select(csvData => csvData.Replace(" ", "")).Where(csvData => !string.IsNullOrEmpty(csvData)).Distinct().ToList();
if (csvColumn.Count() == 5)
{
shapes.Add(new()
{
shape = csvColumn[0], //want to have same index palcement as where headervalue contains = "Shape"
});
}
else
{
Console.WriteLine(row " does not have 5 inputs and cannot be added!");
}
}
先感謝您!
uj5u.com熱心網友回復:
您可以使用 linq 確定您的列:
var colShape = headerValues.ToList().FindIndex(e => e.Equals("SHAPE"));
然后使用它來設定物件中的屬性:
shapes.Add(new()
{
shape = csvColumn[colShape], //want to have same index palcement as where headervalue contains = "Shape"
});
從長遠來看,最好使用 csv 決議庫。
uj5u.com熱心網友回復:
由于您的資料是 CSV 格式,因此您無需重新發明輪子,只需使用CsvHelper 之類的輔助庫即可
using var reader = new StringReader(csvData);
using var csvReader = new CsvReader(reader, CultureInfo.InvariantCulture);
var shapes = csvReader.GetRecords<Shapes>().ToList();
Shapes.shape如果欄位或屬性與資料的大小寫不同,您可能需要對欄位或屬性進行注釋,請使用NameAttribute提供的CsvHelper
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/427471.html
