создание нескольких файлов из одного файла - PullRequest
0 голосов
/ 10 февраля 2012

У меня есть текстовый файл (разделенный табуляцией и новые строки для строк), имеющий n столбцов. Я хочу разбить этот файл на четвертый столбец и создать один файл для каждого отдельного значения этого столбца.

т.е. если пять строк имеют одинаковое значение столбца, скажем, X, все эти пять строк будут помещены в x.txt и т. Д.

В конце обработки у меня будет m файлов, если в четвертом столбце будет m различных значений. Можно предположить, что столбец 4 имеет тип «Дата». Таким образом, необходимо разделить данные по столбцу даты и создать разные файлы, в каждом из которых есть данные за указанную дату.

Есть ли простой способ сделать это?

Ответы [ 2 ]

1 голос
/ 10 февраля 2012

Простой проект

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();
    }
}

Примечание: Вы должны использовать правильный символ разделителя строк и кодировку.

Для чтения ввода вы можете использовать libcsv

0 голосов
/ 10 февраля 2012

В решении, предоставленном укладчиком, вы можете использовать java.util.Scanner для чтения входного файла следующим образом:

Scanner scanner = new Scanner(new File("YourFilePath"));
while (scanner.hasNextLine())
{
     String row = scanner.nextLine();
     .......
}
...