csv merger added

master
Edward M. Kagan 4 years ago
parent 1606cbbf5c
commit 42643fe79b

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>twopm.tech.jax-rs-bench</groupId>
<artifactId>bom</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>csv-merger</artifactId>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-csv</artifactId>
<version>1.9.0</version>
</dependency>
</dependencies>
</project>

@ -0,0 +1,82 @@
package twopm.tech.jaxrsbench.csv.merger;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.Reader;
import static java.lang.System.in;
import java.nio.file.Files;
import java.nio.file.Paths;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVPrinter;
import org.apache.commons.csv.CSVRecord;
/**
*
* @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
*/
public class Merger {
public static final void main(String[] args) throws FileNotFoundException, IOException {
if (args.length != 1) {
System.err.println("I need exactly one argument!");
System.exit(-1);
}
File dataDir = new File(args[0]);
if (!dataDir.exists()) {
System.err.println("Directory '" + dataDir.getPath() + "' does not exist!");
System.exit(-2);
}
File[] files = dataDir.listFiles(new FilenameFilter() {
@Override
public boolean accept(File file, String name) {
return new File(file, name).isFile() && name.endsWith(".csv");
}
});
BufferedWriter writer = new BufferedWriter(new FileWriter(new File(dataDir, "merged.csv")));
CSVPrinter csvPrinter = null;
boolean headerRow;
for (File file : files) {
Reader in = new FileReader(file);
headerRow = true;
Iterable<CSVRecord> records = CSVFormat.RFC4180.parse(in);
for (CSVRecord record : records) {
if (headerRow) {
if (csvPrinter == null) {
String[] header = new String[4 + record.size()];
header[0]="action";
header[1]="version";
header[2]="module";
header[3]="jdk";
for (int col = 0; col < record.size(); col++) {
header[4 + col] = record.get(col);
}
csvPrinter = new CSVPrinter(writer, CSVFormat.DEFAULT.withHeader(header));
System.out.println(csvPrinter);
}
} else {
String[] prefix = file.getName().replace(".csv", "").split("_");
String[] row = new String[4 + record.size()];
for (int col = 0; col < record.size(); col++) {
row[4 + col] = record.get(col);
}
System.arraycopy(prefix, 0, row, 0, prefix.length);
csvPrinter.printRecord(row);
}
if (headerRow) headerRow = !headerRow;
}
}
if (csvPrinter != null) {
csvPrinter.flush();
}
}
}
Loading…
Cancel
Save