Преобразование файла .prn в формат файла csv в java

нужна ваша помощь, чтобы преобразовать файл prn в файл csv с помощью java. Большое спасибо.

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

Я бы хотел, чтобы это выглядело так Преобразование файла .prn в формат файла csv в java

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

Если вы хотите работать над CSV, попробуйте заменить свое изображение на образец, который вы хотите, чтобы мы могли лучше понять, чего вы ожидаете, и мы могли бы лучше вам помочь.

DamCx 28.06.2018 11:40

Используйте apache commons CSV. Создать csv намного проще

pvpkiran 28.06.2018 11:43
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
1 034
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В вашем примере у вас есть четыре записи в качестве ввода, каждая в строке. В вашей таблице результатов все они находятся в одной строке. Я предполагаю, что входные данные описывают полный набор prn. Таким образом, если файл будет содержать наборы prn n, в нем будут строки 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.
  • Файл, в который вы пишете, является ресурсом. Рекомендуется использовать ресурсы с попробуйте-с-ресурсом-заявлением.

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

извините, я не понимаю. Я получил эту ошибку Exception в потоке "main" java.nio.file.NoSuchFileException: C: \ Users \ 686250 \ Dekstop \ users.csv в sun.nio.fs.WindowsException.translateToIOException (WindowsEx‌ ception.java:79) в sun.nio.fs.WindowsException.rethrowAsIOException (WindowsExce‌ ption.java:97) в sun.nio.fs.WindowsException.rethrowAsIOException (WindowsExce‌ ption.java:102) в sun.nio.fs.WindowsFileSystemProvider.newByteChannel (WindowsFileSystemProvider.newByteChannel (WindowsFileSystemProvider.newByteChannel (WindowsFileSystemProvider.newByteChannel) ileSystemProvider.ja‌ va: 230) в java.nio.file.spi.FileSystemProvider.newOutputStream (FileSys‌ temProvider.java:434‌)

user7170424 03.07.2018 12:16

Дважды проверьте, присутствует ли местоположение на заданном пути. Исключение говорит о том, что файл не может быть найден. Это файл, в который вы пишете результаты. Возможно, каталога нет. Попробуйте найти его с помощью проводника Windows или cmd.

LuCio 03.07.2018 12:22

Уже исправил путь к файлу, теперь я получаю эту ошибку. Исключение в потоке "main" java.lang.ArrayIndexOutOfBoundsException: 1

user7170424 03.07.2018 12:25

да, я использую код ur .. bw.append (getId (firstValues)). append (DILIM_CSV) .append (getDa‌ teTime (firstValues)) ‌ .append (DILIM_CSV); - первая строка

user7170424 03.07.2018 12:35

возвращаемые значения [1]; - вторая строка с такой же ошибкой.

user7170424 03.07.2018 12:35

Другие вопросы по теме