比较两个大型CSV文件以删除相同的行/记录

时间:2015-12-28 07:23:10

标签: c# csv compare

我需要比较两个大小为4 GB的大型CSV文件并拥有超过1000万条记录,以便从新CSV文件中获取记录,忽略旧CSV文件中的记录,我无法加载这些文件将文件放入DT或LIST并进行比较以找到相同的记录并将其删除,因为它会给我 System.OutofMemory Exception ,所以我尝试了另一种方法,为每个生成 HashCode CSV中的行,并为每个文件形成两个列表,然后比较两个列表,并确定两个文件之间的差异。

实际问题:

我知道 gethashcode()方法没有足够的信息来取回转换为hashcode的原始字符串,因此我需要一些其他方法来生成哈希代码并检索实际哈希值中的字符串值。

以下是我使用的代码。

生成列表

private List<int> ListgetHashValue(string file)
        {
            try
            {                
                List<int>HashList = new List<int>();                                                                        
                    StreamReader reader = new StreamReader(file);
                    string line;
                    while ((line = reader.ReadLine()) != null)
                    {                       
                        HashList.Add(line.GetHashCode());
                    }                
                return HashList;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

比较清单

List<int> result =  NewFile.Except(OldFile).ToList();

获取不在新文件列表和旧文件列表中的记录

1 个答案:

答案 0 :(得分:0)

我建议将文件分解为多个文件并通过线程异步处理它们,但为此需要对某些参数进行排序,因为比较应仅限于该文件,以后可以将它们全部合并。 / p>