solved s3 ex2

This commit is contained in:
navid.sassan 2020-10-11 17:27:23 +02:00
parent c24e8efdd3
commit a7b28895ba
3 changed files with 101 additions and 0 deletions

View File

@ -1,3 +1,5 @@
package ch.zhaw.ads;
import java.util.*; import java.util.*;
import java.text.*; import java.text.*;

View File

@ -0,0 +1,61 @@
package ch.zhaw.ads;
import java.util.ArrayList;
import java.util.List;
import java.text.ParseException;
import java.lang.ArrayIndexOutOfBoundsException;
public class RankingServer implements CommandExecutor {
List<Competitor> competitors;
@Override
public String execute(String input) {
this.competitors = parseCSV(input);
StringBuffer result = new StringBuffer(100);
result.append("Competitors:\n");
for (Competitor competitor : competitors) {
result.append(competitor.toString() + "\n");
}
return result.toString();
}
/**
* NOTE ABOUT CSV FORMAT (from `man virt-diff`)
* Comma-separated values (CSV) is a deceptive format. It seems like it should be easy to parse,
* but it is definitely not easy to parse.
*
* Myth: Just split fields at commas. Reality: This does not work reliably. This example has two
* columns:
*
* "foo,bar",baz
*
* Myth: Read the file one line at a time. Reality: This does not work reliably. This example has
* one row:
*
* "foo
* bar",baz
*/
private List<Competitor> parseCSV(String csv) {
int startNr, jg;
String name, country, time;
List<Competitor> competitors = new ArrayList<Competitor>();
for (String record : csv.split("\\r?\\n")) {
String[] values = record.split(";");
try {
startNr = Integer.valueOf(values[0]);
name = values[1];
jg = Integer.valueOf(values[2]);
country = values[3];
time = values[4];
competitors.add(new Competitor(startNr, name, jg, country, time));
} catch (NumberFormatException | ParseException | ArrayIndexOutOfBoundsException e) {
System.err.println("Failed to add competitor.");
continue;
}
}
return competitors;
}
}

View File

@ -0,0 +1,38 @@
package ch.zhaw.ads;
import org.junit.Test;
import org.junit.Before;
import static org.junit.Assert.*;
import java.util.*;
import java.io.*;
public class RankingServerTest {
RankingServer rankingServer;
String csv;
@Before
public void setUp() throws Exception {
rankingServer = new RankingServer();
csv = openFile("./build/resources/main/RangZuerich.csv");
}
@Test
public void test1() {
System.out.println(rankingServer.execute(csv));
}
// helper functions
private String openFile(String name) throws Exception {
BufferedReader br = new BufferedReader(
new InputStreamReader(new FileInputStream(name), "ISO-8859-1"));
StringBuffer b = new StringBuffer();
String line;
while ((line = br.readLine()) != null) {
b.append(line);
b.append('\n');
}
return b.toString();
}
}