我有一個文本文件(選項卡分離和行的新行)有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