Конвертировать .prn файл в формат csv в java - PullRequest
0 голосов
/ 28 июня 2018

нужна ваша помощь для преобразования файла prn в файл csv с использованием Java. Огромное спасибо.

Ниже мой файл prn.

я бы хотел, чтобы это показывалось вот так enter image description here

Большое спасибо.

1 Ответ

0 голосов
/ 28 июня 2018

В вашем примере в качестве входных данных у вас есть четыре записи, каждая в строке. В вашей таблице результатов все они находятся в одном ряду. Я предполагаю, что вход описывает полный набор prn. Таким образом, если файл будет содержать n наборов prn, он будет иметь n * 4 строк.

Чтобы отобразить PM, установленный в CSV-файл, вам нужно

  1. читать записи из входного файла
  2. написать строку заголовка (с восемью заголовками)
  3. извлекает в каждой записи соответствующие значения
  4. объединяет извлеченные значения из четырех записей в последовательности в одну строку CSV
  5. напишите строку
  6. повторите шаги с 3 по 5, пока есть дополнительные записи

Вот мое предложение:

public class PrnToCsv {

    private static final String DILIM_PRN = " ";
    private static final String DILIM_CSV = ",";
    private static final Pattern PRN_SPLITTER = Pattern.compile(DILIM_PRN);

    public static void main(String[] args) throws URISyntaxException, IOException {
        List<String> inputLines = Files.readAllLines(new File("C://Temp//csv/input.prn").toPath());
        List<String[]> inputValuesInLines = inputLines.stream().map(l -> PRN_SPLITTER.split(l)).collect(Collectors.toList());

        try (BufferedWriter bw = Files.newBufferedWriter(new File("C://Temp//csv//output.csv").toPath())) {
            // header
            bw.append("POL1").append(DILIM_CSV).append("POL1_Time").append(DILIM_CSV).append("OLV1").append(DILIM_CSV).append("OLV1_Time").append(DILIM_CSV);
            bw.append("POL2").append(DILIM_CSV).append("POL2_Time").append(DILIM_CSV).append("OLV2").append(DILIM_CSV).append("OLV2_Time");
            bw.newLine();

            // data
            for (int i = 0; i + 3 < inputValuesInLines.size(); i = i + 4) {
                String[] firstValues = inputValuesInLines.get(i);
                bw.append(getId(firstValues)).append(DILIM_CSV).append(getDateTime(firstValues)).append(DILIM_CSV);
                String[] secondValues = inputValuesInLines.get(i + 1);
                bw.append(getId(secondValues)).append(DILIM_CSV).append(getDateTime(secondValues)).append(DILIM_CSV);
                String[] thirdValues = inputValuesInLines.get(i + 2);
                bw.append(getId(thirdValues)).append(DILIM_CSV).append(getDateTime(thirdValues)).append(DILIM_CSV);
                String[] fourthValues = inputValuesInLines.get(i + 3);
                bw.append(getId(fourthValues)).append(DILIM_CSV).append(getDateTime(fourthValues));
                bw.newLine();
            }
        }
    }

    public static String getId(String[] values) {
        return values[1];
    }

    public static String getDateTime(String[] values) {
        return values[2] + " " + values[3];
    }

}

Некоторые замечания к коду:

  • Используя nio-API, вы можете прочитать весь файл одной строкой кода.
  • Чтобы извлечь значения строки ввода, я использовал Pattern - split строку в массиве с каждым отдельным словом в качестве значения.
  • Тогда легко получить соответствующие значения записи, используя соответствующие индексы массива.
  • Для записи файла CSV построчно (без дополнительных библиотек) вы можете использовать BufferedWriter.
  • Файл, в который вы пишете, является ресурсом. Рекомендуется использовать ресурсы с оператором try-with-resource .

Надеюсь, я смогу ответить на ваш вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...