C# C操作从CSV解析的数据
我正在创建一个程序,根据用户输入生成示意图。这必须通过动态/手动完成,因为各种可能性的绝对数量为680万,呈指数增长。现在我正在通过CSV导入一些数据 示例数据:C# C操作从CSV解析的数据,c#,csv,parsing,data-manipulation,C#,Csv,Parsing,Data Manipulation,我正在创建一个程序,根据用户输入生成示意图。这必须通过动态/手动完成,因为各种可能性的绝对数量为680万,呈指数增长。现在我正在通过CSV导入一些数据 示例数据: Type,TIN_pos,TIN_ID,Desc Elect, 0, X, Manual Regulator Elect, 0, A, Electronic Regulator 导入代码: List<TIN_Fields> values = File.ReadAllLines("C:\\Users\\User\
Type,TIN_pos,TIN_ID,Desc
Elect, 0, X, Manual Regulator
Elect, 0, A, Electronic Regulator
导入代码:
List<TIN_Fields> values = File.ReadAllLines("C:\\Users\\User\\Desktop\\Visual Basic\\CSV_Test_1.csv")
.Skip(1)
.Select(v => TIN_Fields.FromCsv(v))
.ToList();
public class TIN_Fields
{
public string Type;
public int TIN_pos;
public string TIN_ID;
public string Desc;
public static TIN_Fields FromCsv(string csvLine)
{
string[] values = csvLine.Split(',');
TIN_Fields _Fields = new TIN_Fields();
_Fields.Type = Convert.ToString(values[0]);
_Fields.TIN_pos = Convert.ToInt16(values[1]);
_Fields.TIN_ID = Convert.ToString(values[2]);
_Fields.Desc = Convert.ToString(values[3]);
return _Fields;
}
}
输入:
HXX0X
输出
Model1-PD
提前感谢您的帮助 你问了很多问题,在这里提供了很多额外的细节,但对于这一点: 首先也是最重要的是,我需要运行使用上述代码创建的列表,确保: 锡位置值=0 因为这是输入框的字符位置 正如你所说,你需要“首先”做到这一点 在FromCsv方法中,在创建记录时检查值,如果无效,则抛出错误。像这样:
public static TIN_Fields FromCsv(string csvLine)
{
string[] values = csvLine.Split(',');
TIN_Fields _Fields = new TIN_Fields();
_Fields.Type = Convert.ToString(values[0]);
_Fields.TIN_pos = Convert.ToInt16(values[1]);
if(_Fields.TIN_pos != 0){
throw new Exception("TIN_pos must be 0");
}
_Fields.TIN_ID = Convert.ToString(values[2]);
_Fields.Desc = Convert.ToString(values[3]);
return _Fields;
}
你问了很多问题,在这里提供了很多额外的细节,但是对于这个: 首先也是最重要的是,我需要运行使用上述代码创建的列表,确保: 锡位置值=0 因为这是输入框的字符位置 正如你所说,你需要“首先”做到这一点 在FromCsv方法中,在创建记录时检查值,如果无效,则抛出错误。像这样:
public static TIN_Fields FromCsv(string csvLine)
{
string[] values = csvLine.Split(',');
TIN_Fields _Fields = new TIN_Fields();
_Fields.Type = Convert.ToString(values[0]);
_Fields.TIN_pos = Convert.ToInt16(values[1]);
if(_Fields.TIN_pos != 0){
throw new Exception("TIN_pos must be 0");
}
_Fields.TIN_ID = Convert.ToString(values[2]);
_Fields.Desc = Convert.ToString(values[3]);
return _Fields;
}
假设您已经正确读取了CSV(看起来是这样),那么从列表中选择适当的TIN就是一个简单的LINQ语句。以下代码假定三角网ID是唯一的,且长度仅为单个字符
static void Main(string[] args)
{
string testCsv = @"C:\Users\User\Desktop\Visual Basic\CSV_Test_1.csv";
List<TIN_Fields> values = File.ReadAllLines(testCsv)
.Skip(1)
.Select(v => TIN_Fields.FromCsv(v))
.ToList();
// Simulates input received from form
string input = "HXX0X";
TIN_Fields selectedTIN = values.First(x => x.TIN_ID == Convert.ToString(input[0]));
// Insert the description as needed in your ouput.
string output = $"{ selectedTIN.Desc }-";
}
希望这能回答问题的另一部分。Convert.ToString是必需的,因为输入[0]的输出是一个字符。假设您已经正确读取了CSV,那么从列表中选择适当的TIN就是一个简单的LINQ语句。以下代码假定三角网ID是唯一的,且长度仅为单个字符
static void Main(string[] args)
{
string testCsv = @"C:\Users\User\Desktop\Visual Basic\CSV_Test_1.csv";
List<TIN_Fields> values = File.ReadAllLines(testCsv)
.Skip(1)
.Select(v => TIN_Fields.FromCsv(v))
.ToList();
// Simulates input received from form
string input = "HXX0X";
TIN_Fields selectedTIN = values.First(x => x.TIN_ID == Convert.ToString(input[0]));
// Insert the description as needed in your ouput.
string output = $"{ selectedTIN.Desc }-";
}
希望这能回答问题的另一部分。Convert.ToString是必需的,因为输入[0]的输出是一个字符。我想你的意思是!=。我想你是说!=。谢谢你的帮助!TIN_ID不是唯一的,但我通过在LINQ语句中使用AND语句使其工作。TIN_字段STIN_0=values.Findx=>x.TIN_pos==0&&x.TIN_ID==Convert.ToStringchar.toupertin_Text[0];谢谢你的帮助!TIN_ID不是唯一的,但我通过在LINQ语句中使用AND语句使其工作。TIN_字段STIN_0=values.Findx=>x.TIN_pos==0&&x.TIN_ID==Convert.ToStringchar.toupertin_Text[0];