Skip to content
Snippets Groups Projects
Commit cb0724c7 authored by Lorenz Boguhn's avatar Lorenz Boguhn Committed by Sören Henning
Browse files

Fix IOHandler.kt + IOHandlerTest.kt

Now adds quotation marks around values if they contain commas
parent b06c3841
Branches
Tags
1 merge request!289Fix Csv export
...@@ -64,15 +64,23 @@ class IOHandler { ...@@ -64,15 +64,23 @@ class IOHandler {
* Write to CSV file * Write to CSV file
* *
* @param fileURL the URL of the file * @param fileURL the URL of the file
* @param data the data to write in the file, as list of list, each subList corresponds to a row in the CSV file * @param data the data to write in the csv, as list of list,
* @param columns columns of the CSV file * each sublist corresponds to a row in the CSV file
* @param columns name of the columns
*/ */
fun writeToCSVFile(fileURL: String, data: List<List<String>>, columns: List<String>) { fun writeToCSVFile(fileURL: String, data: List<List<String>>, columns: List<String>) {
val outputFile = File("$fileURL.csv") val outputFile = File("$fileURL.csv")
PrintWriter(outputFile).use { pw -> PrintWriter(outputFile).use { pw ->
pw.println(columns.joinToString(separator = ",")) pw.println(columns.joinToString(separator = ","))
data.forEach { data.forEach{ row ->
pw.println(it.joinToString(separator = ",")) val writeRow = row.toMutableList()
// change entry if it contains a comma
writeRow.forEachIndexed { index, entry ->
if (entry.contains(",")){
writeRow[index] = "\"" + entry + "\""
}
}
pw.println(writeRow.joinToString(separator = ","))
} }
} }
logger.info { "Wrote CSV file: $fileURL to ${outputFile.absolutePath}." } logger.info { "Wrote CSV file: $fileURL to ${outputFile.absolutePath}." }
... ...
......
...@@ -11,6 +11,7 @@ import org.junit.jupiter.api.Test ...@@ -11,6 +11,7 @@ import org.junit.jupiter.api.Test
import org.junit.rules.TemporaryFolder import org.junit.rules.TemporaryFolder
import org.junitpioneer.jupiter.ClearEnvironmentVariable import org.junitpioneer.jupiter.ClearEnvironmentVariable
import org.junitpioneer.jupiter.SetEnvironmentVariable import org.junitpioneer.jupiter.SetEnvironmentVariable
import java.util.stream.Collectors
const val FOLDER_URL = "Test-Folder" const val FOLDER_URL = "Test-Folder"
...@@ -65,6 +66,48 @@ internal class IOHandlerTest { ...@@ -65,6 +66,48 @@ internal class IOHandlerTest {
) )
} }
/**
* Tests if values with commas are surrounded with quotation marks.
*/
@Test
fun testWriteToCSVFileWithComma() {
temporaryFolder.create()
val folder = temporaryFolder.newFolder(FOLDER_URL)
val columns = listOf("Fruit", "Color")
val testContent = listOf(
listOf("apples, paprika", "red"),
listOf("bananas, pineapple", "yellow"),
listOf("avocado, coconut", "brown")
)
val expectedContent = listOf(
listOf("\"apples, paprika\"", "red"),
listOf("\"bananas, pineapple\"", "yellow"),
listOf("\"avocado, coconut\"", "brown")
)
IOHandler().writeToCSVFile(
fileURL = "${folder.absolutePath}/test-file",
data = testContent,
columns = columns
)
// construct string from the columns
var expected = columns.stream().collect(Collectors.joining(","))
// add values from the expectedContent to expected string
expectedContent.forEach{
expected += "\n" + it.joinToString(separator = ",")
}
assertEquals(
expected,
IOHandler().readFileAsString("${folder.absolutePath}/test-file.csv")
)
}
@Test @Test
fun testWriteToJSONFile() { fun testWriteToJSONFile() {
temporaryFolder.create() temporaryFolder.create()
... ...
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment