我必须在一个项目中工作,其中包含大量存储在原始文本文件中的数据。每个字段由其大小分隔,即字段1从位置0到3,依此类推。。(不是CSV文件)
这个文件包含超过一百万行。在
我需要把它存入数据库。我查了几篇文章,想知道什么才是最好的解决方法,看来技术选择比算法更重要。我对Php、Perl或Python开放。请随意提出建议。在
现在,文件结构本身有点棘手。下面是一个例子:
A880780093vvd47aa8db20d4133e6f587cf046054e8316000212093659D11001
C880780093d47aa8db20d4133e6f587cf046054e831600021209365907000 0711012012C
A880780093vvcaacb22bfb091127f9c9e14175d858ee25000212093681O11001
C880780093caacb22bfb091127f9c9e14175d858ee2500021209368107000 0611012012ADI
D880780093caacb22bfb091127f9c9e14175d858ee250002120936810700011012012HK00210Z
A880780093vvb92f937a3fd1268c1478deb174a1bfca86000212093750S11041
C880780093b92f937a3fd1268c1478deb174a1bfca8600021209375007000 3911012012PB
C880780093b92f937a3fd1268c1478deb174a1bfca8600021209375007000 3911012012B 1002
E880780093212093750b92f937a3fd1268c1478deb174a1bfca8600007000110120120100000127000000000000
C880780093b92f937a3fd1268c1478deb174a1bfca8600021209375007000 3911012012B
基本上,有6种类型的行,从A到F;行A是块的头。直线B和C的长度和字段完全相同。D行是C行的可能补充,也就是说它连接到C行,但不是必需的;也意味着没有C行就不能有D行。E行和F行是独立的行,只连接到a行。(所有行都是块的一部分,所以它们都可以“附加”到行a或虚拟块ID上)
我将如何创建一个允许我: -根据某些条件修改某些行上的某些数据(例如,如果C行的第5个字符为4,则第10个字符将变为7) -跟踪修改过的内容(即,我希望能够将它们与它们原来的自己联系起来) -能够重建原始文本文件,删除原始行并用修改后的版本替换它们 -能够在块中插入新行:如果C行的第7个字符=0,那么我在它下面添加一个D行。 -保持线路秩序完好。(如果插入一行,则将下一行的顺序向前移动1列)
我考虑过在所有5个行表中使用一个parent_id外键(每个行类型一个,因为它们没有相同的字段);这样就解决了行排序问题,但我一直在重建修改后的文件版本。我还考虑过将文件分成块(从a行开始),然后将行链接到块ID。。。在
如有任何建议,我们将不胜感激!在
提前谢谢你!在
逐行检查文件并使用堆栈。大概是:
当然,有比丑陋的
switch
更好的解决方案,但它是快而不脏的。你的数据库设计答案是不可能回答的,因为我们对需求一无所知。总而言之,考虑发布你的工作,并就一个大问题的一小部分提出具体问题,而不是要求解决大问题。在相关问题 更多 >
编程相关推荐