2016-02-03 27 views
-1

我已经继承了一个应用程序,它部分处理处理许多大的分隔文件并将它们合并到数据库中。为了加速浏览这些文件的过程,我创建了一个存储每个文件的MD5的文件。一旦文件在第二天发布,我将当前正在解析的行的MD5值与包含从上次处理发生时收集的MD5值的Set对象进行比较。这很好,并且将上传到我们数据库的时间减少了99%。解析分隔文件并创建排除某些字段的散列

除了这一个荒谬,而相当大(300MB)的文件。具有创建文件时间戳记的每一行中的第一条记录。这是愚蠢的,我不能要求发件人改变格式。

我的问题并不一定是如何处理这个问题在一个较低的水平,虽然建议总是欢迎!

这个应用程序是在Linux环境下运行,并且我可以简单地运行这个...

cut -f 2- -d"|" stupid_file.dat | awk '{FS="|"; print $0}' > file.dat 

...我可能是我与处理的文件快乐的方式。这基本上是我计划要做的,如果这个线程无法解决。

我希望得到的是更高层次的答案,以不同的方式来解决这个问题。基本上,语言不可知论的东西。我目前的设置是,每个进入的文件的“定义”存储在数据库中,这是我们用来获取分隔符,预期文件名,压缩类型(如果有的话) ,等等......

一个想到我不得不希望得到球滚动的是添加一个列,让我们称之为HASH_IGNORE,在我的定义表中,这将表明我想忽略哪些字段。然后我可以将它传递给我的散列函数,根据需要进行字符串拆分/连接,然后散列结果。像存储“1”忽略第一个值或“2-3,5-”仅包含第一个和第四个值。然后我的函数可能看起来像:

hashValue = hashDataRow(rowData, hashIgnoreValue); 

这将是一个“可接受”的方式去了解这一点,还是我过于复杂这个问题?我想知道是否有其他人在处理分析分隔文件时遇到类似的情况。

+0

我非常努力,但是我无法在这里找到C++或Java问题。 –

+0

@Sam - 这是一个语言不可知论类型的问题。在Java,C++等中实现的答案可能是放置这些标签的意图。对不起,造成任何混乱。 – rgrwatson85

回答

0

我最终使用了我的问题中提出的想法。我在数据库中添加了一个字段,允许我调整分隔文件中的哪些字段用于创建散列。如果有人需要类似的解决方案,我愿意发布一些代码片段。

相关问题