CSV文件用逗号分隔的字符串,我想添加所有正确的值到类
本文关键字:添加 文件 分隔 字符串 CSV | 更新日期: 2023-09-27 18:19:04
我有一个类:
public class PicDetailsClass : ISerializable
{
public string Exif_Image_Make { get; set; }
public string Exif_Image_Model { get; set; }
public string Exif_Image_Orientation { get; set;
…(我想在这个类中存储超过200个不同的字符串)
}
然后我有一个包含以下数据的文本文件:
Exif.Image.Make,ASCII,NIKOND
Exif.Image.Model,ASCII,D5100
...
我要做的是读取文本文件,基于第一列(Exif.Image)。,然后我想将第3列的数据以第2列所述的形式(ASCII)存储到一个列表中,该列表最终可以存储在XML或SQL中。
我已经得到了我创建类的部分,就像上面的例子一样,现在逐行阅读文本文件,我能够将每一列存储在数组中,但不确定现在如何将它们存储在列表中,而不使用if语句逐一执行
using (StreamReader reader = new StreamReader(File))
{
string line;
PicDetailsClass Details = new PicDetailsClass();
while ((line = reader.ReadLine()) != null)
{
string allText = Regex.Replace(line, @"'s+", ",");
string[] myString = Regex.Replace(line, @"'s+", ",").Split(',');
foreach (string column in myString)
{
string Type = myString[0];
if (Type == "Exif.Image.Make")
{
Details.Exif_Image_Make = myString[3];
}
}
}
reader.Close();
}
这听起来像是你可以用一些基于反射的魔法来修复的东西:-)
只要类型列与属性名匹配即可。有了_,你可以做如下的事情(伪代码从我的头):
// Use the following
while ((line = reader.ReadLine()) != null)
{
var allText = Regex.Replace(line, @"'s+", ",");
var myString = Regex.Replace(line, @"'s+", ",").Split(',');
var propertyName = myString[0].Replace(".", "_");
var property = typeof(Details).GetProperty(propertyName);
property.SetValue(Details, myString[3]);
}
这将尝试通过查看列0并替换来确定属性名。_。然后,它将从Details对象的类型中获取对该属性的引用,最后将值赋给所找到的属性。
这里没有错误检查,所以您可能会添加它,并且没有类型转换,但如果需要,可以很容易地添加它们。