从文件中读取并解析SQL表

时间:2013-12-06 14:33:54

标签: c# sql-server odbc

以下所有内容必须在C#中完成。解析SQL表(SQL Server)将使用System.Data.Odbc中的方法完成。

假设我有两个.csv文件,fi1fi2。第一个csv文件有两列idval1,第二个csv也有两列,idval2

我想读取这两个文件,并使用以下列将输出解析为一个SQL表:id, val1, val2

问题是这两个文件在id列中可能有不同的条目:换句话说,某些ID可能具有val1值但没有val2值,反之亦然,或者他们可能同时拥有这两个值。

该表应包含两个文件中id列的并集。

示例:

文件1

enter image description here

文件2

enter image description here

我希望最终SQL表看起来像这样:

enter image description here

请注意,每个文件可能包含重复项,我们希望在解析SQL表时排除重复项。

我的想法是创建两个词典dict1dict2,其中键是id,值为val1和{{ 1}}。字典将用于确保不包括重复项:

val2

但是,在将每个文件添加到字典后,我不确定如何匹配两个字典的id。

有人会对如何处理这个问题有一个很好的暗示吗?

1 个答案:

答案 0 :(得分:1)

我会做一个元组列表来保存这里的值而不是字典,以便所有信息都在一个地方而不是匹配的键,每个元组对应一个表记录

var dict = new List<Tuple<string, string, string>>();
        using (StreamReader rdr = new StreamReader(fi1))
        {
            while (!rdr.EndOfStream)
            {
                string ln = rdr.ReadLine();
                string[] split_ln = ln.Split(',');
                dict.Add(new Tuple<string, string, string>(split_ln[0], split_ln[1],null));
            }
        }
        using (StreamReader rdr = new StreamReader(fi2))
        {
            while (!rdr.EndOfStream)
            {
                string ln = rdr.ReadLine();
                string[] split_ln = ln.Split(',');
                if (dict.Any(item => item.Item1 == split_ln[0]))
                {
                    var item = dict.Find(i => i.Item1 == split_ln[0]);
                    var newtuple = new Tuple<string, string, string>(item.Item1, item.Item2, split_ln[1]);
                    dict.Remove(item);
                    dict.Add(newtuple);
                }
                else
                {
                    dict.Add(new Tuple<string, string, string>(split_ln[0],null,split_ln[1]));
                }
            }
        }