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();
            }

CSV文件用逗号分隔的字符串,我想添加所有正确的值到类

这听起来像是你可以用一些基于反射的魔法来修复的东西:-)

只要类型列与属性名匹配即可。有了_,你可以做如下的事情(伪代码从我的头):

// 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对象的类型中获取对该属性的引用,最后将值赋给所找到的属性。

这里没有错误检查,所以您可能会添加它,并且没有类型转换,但如果需要,可以很容易地添加它们。