1 package net.bmahe.genetics4j.samples;
2
3 import java.io.BufferedReader;
4 import java.io.FileReader;
5 import java.io.IOException;
6 import java.nio.charset.StandardCharsets;
7 import java.util.ArrayList;
8 import java.util.HashMap;
9 import java.util.List;
10 import java.util.Map;
11
12 public class TSPLIBParser {
13
14 public TSPLIBParser() {
15 }
16
17 TSPLIBProblem parse(final String filename) throws IOException {
18
19 final FileReader fileReader = new FileReader(filename, StandardCharsets.UTF_8);
20
21 final Map<String, String> attributes = new HashMap<String, String>();
22 final List<Position> cities = new ArrayList<Position>();
23
24 try (final BufferedReader bufferReader = new BufferedReader(fileReader)) {
25
26 boolean parsingHeaders = true;
27 String line;
28 while ((line = bufferReader.readLine()) != null) {
29 System.out.println(line);
30
31 if ("NODE_COORD_SECTION".equals(line)) {
32 parsingHeaders = false;
33 } else if ("EOF".equals(line)) {
34
35 } else if (parsingHeaders) {
36 final String[] strings = line.split(": ", 2);
37 attributes.put(strings[0], strings[1]);
38 } else {
39 final String[] strings = line.split("\\s");
40 cities.add(new Position(Double.parseDouble(strings[1]), Double.parseDouble(strings[2])));
41 }
42
43 }
44 }
45 return new TSPLIBProblem(attributes, cities);
46 }
47 }