我从未见过此行之前的结尾,并且正在尝试将文件加载到数据库中。
所有线都具有固定宽度。在包含数据的CSV文本之后(长度逐行变化),有一个CR,后跟多个空格,并以LF结尾。空格提供填充以使线宽相等。
Line1,Data 1,Data 2,Data 3,4,50D20202020200A
Line2,Data 11,Data 21,Data 31,41,510D2020200A
Line3,Data12,Data22,Data 32,42,520D202020200A
我将使用C#中的流读取器/写入器来处理此问题,但是每个月都会有40个文件,如果有一种方法可以一次全部转换而不是一次转换,我会宁愿那样做。
有什么想法吗?
答案 0 :(得分:1)
如果在整个过程的正确时机实现流的逐行处理,则不必成为瓶颈。
当我必须进行这种预处理时,我会在入站文件夹上放置一个文件夹监视,然后自动拾取每个文件并在到达时进行处理,将原始文件放入存档文件夹,然后将处理后的文件写入另一个文件夹从中解析数据或将数据加载到数据库中的位置。除非您有异常的实时需求,否则您永远不会注意到这种开销。如果您确实有实时要求,那么与批处理数据文件所遇到的所有其他问题相比,此问题将显得苍白:)
但是您甚至根本不必经过预处理步骤。您没有指出要使用哪个数据库,也没有计划如何加载数据,但是许多数据库确实包含用于处理定长记录的实用程序。过去,固定格式的文件带有各种可以想象的奇异格式(并且包含必须被剥离或转换的所有内容)。结果,那些实用程序往往在这种任务上非常有效。以我的经验,它们可以轻松地比逐行处理快至少一个数量级,这可以对较大的散货产生真正的影响。
如果您的数据库没有好的批量导入处理工具,那么已经编写了许多开源或免费的实用程序,它们几乎可以完全满足您的需求。您可以在GitHub和其他地方找到它们。例如, NPM替换是here, zzzprojects findandreplace 是here。
对于一种快速而肮脏的方法,它允许您在开发更强大的解决方案时预览所有更改,因此许多文本编辑器都具有find and replace in multiple files
的功能。我过去曾经成功地使用过这种方法。例如,这是NotePad ++中的窗口,可让您使用RegEx删除或更改所有符合定义条件的文件中所需的内容。