我有一个文本文件(选项卡分离和行的新行)有n列。我想在第四列分割该文件,并为该列的每个不同值生成一个文件。从一个文件生成多个文件
即即使五行具有相同的列值X,所有这五行都将进入x.txt等等。
在处理结束时,如果第四列中有m个不同的值,我将有m个文件。您可以假定第4列是“日期”类型。所以基本上需要对日期列上的数据进行分区,并生成具有指定日期数据的每个文件的不同文件。
有没有简单的方法来做到这一点?
我有一个文本文件(选项卡分离和行的新行)有n列。我想在第四列分割该文件,并为该列的每个不同值生成一个文件。从一个文件生成多个文件
即即使五行具有相同的列值X,所有这五行都将进入x.txt等等。
在处理结束时,如果第四列中有m个不同的值,我将有m个文件。您可以假定第4列是“日期”类型。所以基本上需要对日期列上的数据进行分区,并生成具有指定日期数据的每个文件的不同文件。
有没有简单的方法来做到这一点?
一个简单的草案
public static void main(String[] args) throws IOException {
String[] input = {"A1\tB\tC\tD\t2012-02-10",
"A2\tB\tC\tD\t2012-02-10",
"A3\tB\tC\tD\t2012-02-08",
"A4\tB\tC\tD\t2012-02-08",
"A5\t\tC\tD\t2012-02-07",
"A6\tB\tC\tD\t2012-02-07" };
Map<String,String> map = new HashMap<String, String>();
for (String row : input) {
String[] cols = row.split("\t");
String date = cols[4];
String content = map.get(date);
content = (content == null) ? row : content + "\n" + row;
map.put(date, content);
}
for (String filename : map.keySet()) {
FileOutputStream fos = new FileOutputStream("c:\\" + filename);
fos.write(map.get(filename).getBytes());
fos.close();
}
}
注意:您shold使用正确的行分隔符字符和编码。
用于读输入,你可以使用libcsv
在由堆垛机所提供的解决方案,你可以使用java.util.Scanner
读取输入文件,如下所示:
Scanner scanner = new Scanner(new File("YourFilePath"));
while (scanner.hasNextLine())
{
String row = scanner.nextLine();
.......
}
难道这会是一个一次性的东西?如果是这样,我建议你使用任何允许基于列选择的文本编辑器。 – adarshr 2012-02-10 09:11:43
不,这将是一个重复的任务,所以我想为它编写一个java程序。 – TopCoder 2012-02-10 09:13:09
将文件加载到数据库中:)并转储它,只要你喜欢:)。但通常情况下,你将你的文件加载到一个数组列表中,你创建的类实现了Comparator ,然后比较你的行的日期。做'Collections.sort(arraylist,comparatorInstance);'然后迭代并做任何你喜欢的事情。 –
2012-02-10 09:14:47