根据 header 文本对变量进行排序
Sort a variable based on header text
我正在寻找指导,当我试图用我的头衔传达时,我遇到了一个问题,我收到的数据有时看起来像这样,例如:
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!");
}
}
提前致谢!
由于你的数据是CSV格式的,所以你不需要重新发明轮子,只需要使用像CsvHelper
这样的辅助库
using var reader = new StringReader(csvData);
using var csvReader = new CsvReader(reader, CultureInfo.InvariantCulture);
var shapes = csvReader.GetRecords<Shapes>().ToList();
您可能需要注释 Shapes.shape
字段或 属性 如果它与数据的大小写不同,请使用 CsvHelper
[=15= 提供的 NameAttribute
]
您可以使用 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 解析库。
我正在寻找指导,当我试图用我的头衔传达时,我遇到了一个问题,我收到的数据有时看起来像这样,例如:
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!");
}
}
提前致谢!
由于你的数据是CSV格式的,所以你不需要重新发明轮子,只需要使用像CsvHelper
这样的辅助库using var reader = new StringReader(csvData);
using var csvReader = new CsvReader(reader, CultureInfo.InvariantCulture);
var shapes = csvReader.GetRecords<Shapes>().ToList();
您可能需要注释 Shapes.shape
字段或 属性 如果它与数据的大小写不同,请使用 CsvHelper
[=15= 提供的 NameAttribute
]
您可以使用 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 解析库。