在Java中将.prn文件转换为CSV文件格式

时间:2018-06-28 09:34:42

标签: java csv text-files

需要您的帮助,以使用Java将prn文件转换为csv文件。 非常感谢。

下面是我的prn文件。

我想让它像这样显示 enter image description here

非常感谢您。

1 个答案:

答案 0 :(得分:0)

在您的示例中,您有四个条目作为输入,每行一个。在结果表中,它们全部都位于一行中。我假设输入描述了完整的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,您可以用一行代码读取整个文件。
  • 要提取输入行的值,我使用了Patternsplit行到一个数组,每个单词作为一个值。
  • 然后,使用适当的数组索引很容易获得条目的相关值。
  • 要逐行编写csv文件(没有其他库),可以使用BufferedWriter
  • 您要写入的文件是一种资源。建议与try-with-resource-statement一起使用资源。

希望我能回答你的问题。

相关问题