Как я могу разделить длинную строку на строки в ")"? - PullRequest
0 голосов
/ 02 мая 2018

С некоторой головной болью, пытающейся правильно проанализировать текстовый файл, это извлечение из базы данных mysql, но перед тем, как его можно будет снова вставить, необходимо немного изменить данные.

Моя программа берет файл .txt и анализирует его для создания файла .txt, который достаточно прост.

Проблема в том, что он неправильно разбивает файл. Файл выглядит следующим образом (среднее поле каждого выглядит странно, потому что я изменил его на случайные буквы, чтобы скрыть реальные данные):

(92,'xxxname',4013),(93,'sss-xxx',4047),(94,'xxx-sss',3841),(95,'ssss',2593),(96,'ssss-sss',2587),(97,'Bes-sss',2589),

Я хочу разделить его так, чтобы он выглядел как:

(92, 'xxxname',4013),

(93, 'sss-xxx', 4047),

(94, 'xxx-sss', 3841),

И так далее ...

Текущий код для разбора выглядит следующим образом:

public void parseSQL(File file) throws IOException {
    Scanner scanner = new Scanner(file);

    while (scanner.hasNext()) {
        String line = scanner.next();
        String[] lines = line.split(Pattern.quote("),"));

        for (String aLine : lines) {
            logLine(aLine);
        }
    }

}

public static void logLine(String message) throws IOException {
    PrintWriter out = new PrintWriter(new FileWriter("output.txt", true), 
         true);
    out.println(message);
    out.close();
}

В настоящее время вывод, который я получаю, примерно на треке, но более разделен, чем должен быть, и, конечно, метод split удаляет ")", который не нужен.

Пример токового выхода:

*(1,'Vdddd
Cfffff',1989
(2,'Wdd',3710
(3,'Wfffff
Hffffff
Limited-TLC',3901
(4,'ffffffun88',2714
(5,'ffffff8',1135
(6,'gfgg8*

Немного поигрался и много раз искал здесь и в других местах, но из идей, любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Ответ прост, эта строка:

String line = scanner.next(); 

Должно быть:

String line = scanner.nextLine();

Спасибо за ваши попытки, ребята, извините за глупость

0 голосов
/ 02 мая 2018

Вы можете использовать String.replace. Также нет необходимости создавать несколько PrintWriter с и каждый раз закрывать поток.

public void parseSQL(File file) throws IOException {
    Scanner scanner = new Scanner(file);

    PrintWriter out = new PrintWriter(new FileWriter("output.txt", true), true);
    while (scanner.hasNext()) {
        String line = scanner.next();
        out.println(line.replace("),", ")," + System.lineSeparator()));
    }
    out.close();
}
...