1

我有一个包含大量数字(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.

任何帮助,将不胜感激。

4

1 回答 1

1

我会使用一个循环来循环遍历文本文件中的每一行,我还会使用 Java 方法来操作字符串。

def file = new File('C:\\file.txt')

StringBuilder sb = new StringBuilder();

file.eachLine { line ->

    //set StringBuilder to new line
    sb.setLength(0);
    sb.append(line);

    //format string
    sb.setCharAt(1, ',');
    sb.insert(5, '.');
}

然后,您可以将每一行写入一个新的文本文件,例如此处。您可以使用一个简单的计数器(例如counter = 0;then counter++;)来存储已读/写的最新行,并在发生错误时使用它。如果您也经常遇到崩溃,您可以在 try/catch 语句中捕获可能的错误。

指南应该为您提供使用数据库(假设是 SQL)的良好开端。

警告,所有这些代码都未经测试,希望能给你更多的指导。可能有许多其他方法可以以不同的方式解决这个问题,所以请保持开放的心态。

于 2012-07-22T10:34:30.663 回答