我有一个包含大量数字(137mb 文本文件)的文本文件,我希望使用 groovy 打开文本文件,逐行读取,修改数字,然后将它们放入数据库(如字符串)。每行将有 2 个项目需要写入单独的数据库列,这些列是相关的。
我的文本文件如下所示:
A.12345
A.14553
A.26343
B.23524
C.43633
C.23525
所以流程是:
Step 1.The file is opened
Step 2.Line 1 is red
Step 3.Line 1 is split into letter/number pair [:]
Step 4.The number is divided by 10
Step 5.Letter is written to letter data base (as string)
Step 6.Number is written to number database (as string)
Step 7.Letter:number pair is also written to a separate comma separated text file.
Step 8.Proceed to next line (line 2)
输出文本文件应如下所示:
A,1234.5
A,1455.3
A,2634.3
B,2352.4
C,4363.3
C,2352.5
数字数据库应如下所示:
1:1234.5
2:1455.3
3:2634.3
4:2352.4
5:4363.3
6:2352.5
*前导编号是数据库索引位置,用于关系目的
字母数据库应如下所示:
1:A
2:A
3:A
4:B
5:C
6:C
*前导编号是数据库索引位置,用于关系目的
我已经能够完成大部分工作;我遇到的问题是无法正确使用 .eachLine( line -> ) 函数......并且不知道如何将值输出到数据库。
还有一件事我非常关注,那就是脚本遇到错误的实例。文本文件有大量条目(大约 9000000)所以我想知道是否有办法做到这一点,所以如果脚本失败或发生任何事情,我可以从最后修改的行重新启动脚本。
意思是,脚本有一个错误(我的计算机以某种方式关闭)并在文本文件的第 125122 行(完成对第 125122 行的修改)处停止运行......我该如何做到这一点当我第二次启动脚本时运行第 125123 行的脚本。
到目前为止,这是我的示例代码:
//openfile
myFile = new File("C:\\file.txt")
//set fileline to target
printFileLine = { it }
//set target to argument
numArg = myFile.eachLine( printFileLine )
//set argument to array split at "."
numArray = numArg.split(".")
//set int array for numbers after the first char, which is a letter
def intArray = numArray[2] { it as int } as int
//set string array for numbers after the first char, which is a letter
def letArray = numArray[1] { it as string }
//No clue how to write to a database or file... or do the persistence thing.
任何帮助,将不胜感激。