【发布时间】:2021-01-21 20:37:45
【问题描述】:
我正在创建一个程序来根据用户输入生成示意图。由于不同可能性的庞大数量(6.8M,呈指数增长),这必须动态/手动完成。现在我正在通过 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\\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;
}
}
导入数据后,我需要用它做两件事,
-
在 ListView 表中显示原始 csv 数据,以便用户查看列表中是否有任何内容需要更新。
-
能够将列表中的项目与10位十六进制代码中的各种字符进行比较,并吐出一些结果。
首先,我需要遍历使用上述代码创建的列表,确保:
TIN_pos 值 = 0
因为那是输入框的字符位置。
然后,使用其余选项,在 TIN_ID 字段中查找输入中表示的字符。 一旦找到,它应该输出 Desc 字段。
我看过的所有地方都说要使用 foreach,但这需要数组名称,这是让我感到困惑的部分。我已经尝试在 FromCSV 方法中填写基本上所有的变量,并且通常会收到一个错误,即该类没有定义。
希望能消除我对解释的混淆,这是我创建的代码,它做同样的事情,但使用 switch case 和 if 语句将 CSV 数据硬编码到其中。
public partial class Form1 : Form
{
public string Model_Chassis;
public string Model_Test_Type;
public int ChannelNumberVar => Convert.ToInt32(TextBox_TIN[2]);
public string Tester_Type_Selector;
public string TextBox_TIN
{
get { return TIN_Entry_TextBox.Text; }
set { TIN_Entry_TextBox.Text = value; }
}
public string Model_Data_D
{
get { return Model_Data.Text; }
set { Model_Data.Text = value; }
}
public Form1()
{
InitializeComponent();
}
//Method grabs TIN Box data and decodes it to model information.
public void Model_Select()
{
//Picks Model Chassis
switch (char.ToUpper(TextBox_TIN[0]))
{
case 'H':
{
Model_Chassis = Coding.Model1.description;
}
break;
default:
{
Model_Data_D = "INVALID TIN";
}
break;
}
//Picks Test Type
switch (char.ToUpper(TextBox_TIN[3]))
{
case '0':
{
Model_Test_Type = Test_Types.TT_PD.TT_tt;
}
break;
case '1':
{
Model_Test_Type = Test_Types.TT_PV.TT_tt;
}
break;
default:
{
Model_Test_Type = "";
}
break;
}
//Puts chassis and Test Type together
if (Model_Data_D.Equals("INVALID TIN"))
{
;
}
else if (char.ToUpper(TextBox_TIN[2]).Equals(Coding.Num_Chan_1_2.tin_id))
{
Model_Data_D = $"{Model_Chassis}-{Model_Test_Type}";
}
else
{
Model_Data_D = $"{Model_Chassis}-{TextBox_TIN[2]}{Model_Test_Type}";
}
}
public class Coding
{
public char tin_id;
public string description;
public Coding(char TIN_ID, string Desc)
{
tin_id = TIN_ID;
description = Desc;
}
public static Coding Model1 = new Coding('H', "Model1");
public static Coding Num_Chan_1_2 = new Coding('X', "Single Channel");
public static Coding Elect_Reg_F_1 = new Coding('X', "Manual Regulator");
}
}
输入:
HXX0X
输出
Model1-PD
提前感谢您的帮助!
【问题讨论】:
标签: c# csv parsing data-manipulation