-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcsv2json.groovy
155 lines (119 loc) · 4.44 KB
/
csv2json.groovy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
private static def parseCSV(rawCSV, headers) {
def outputList = [];
String str;
String str2;
BufferedReader reader = new BufferedReader(new StringReader(rawCSV));
Boolean resume = false;
def lineData;
try {
while ((str = reader.readLine()) != null) {
if (resume) {
lineData = parseCSVLine(str, lineData.list, true)
} else {
lineData = parseCSVLine(str, [], false)
}
if (lineData.resume == false) {
resume = false;
def outObject = [:]
for (int i = 0; i < headers.size(); i++) {
if (i < lineData.list.size()) {
outObject."${ headers[i]}" = lineData.list[i].trim()
} else {
outObject."${ headers[i]}" = null
}
}
outputList.add(outObject)
} else {
resume = true;
}
}
} catch(IOException e) {
e.printStackTrace();
}
return outputList
}
private static def parseCSVLine(String line, tokenList, Boolean resume) {
int safetyCounter = 0;
////System.out.println("TokenList: " + tokenList);
////System.out.println("Line: " + line);
if (resume) {
def resumeToken = tokenList[tokenList.size() - 1]
if (resumeToken.endsWith("\"")) {
resumeToken = resumeToken.subSequence(0, resumeToken.length() - 1)
}
line = resumeToken + "\n" + line
tokenList.pop()
}
resume = false
while (safetyCounter < 100000 && line.length() > 0) {
safetyCounter++;
String token = parseCSVToken(line)
////System.out.println("Token: " + token);
if (line.length() < token.length()) {
////System.out.println("Split detected. " + token);
line = "";
resume = true
} else {
line = line.substring(token.length())
if (line.startsWith(",")) {
line = line.substring(1);
}
if (token.startsWith("\"") && token.endsWith("\"")) {
token = token.subSequence(1, token.length() - 1)
}
token = token.replace("\"\"", "\"");
}
tokenList.add(token)
}
if (safetyCounter >= 100000) {
throw new Exception("infinite loop while parsing CSV line")
}
return ['list':tokenList, 'resume': resume]
}
private static String parseCSVToken(String token) {
if (token.equals("\"\"")) {
return "\"\""
} else if (token.startsWith("\"")) {
String s = token.substring(1)
s = s.replace("\"\"", "§§");
String[] sSplit = s.split("\"");
s = sSplit[0].replace("§§", "\"\"");
s = "\"" + s + "\"";
return s;
} else {
String[] tokenSplit = token.split(",");
////System.out.println(tokenSplit);
if (tokenSplit.length > 0) {
return tokenSplit[0];
} else {
return ""
}
}
}
def headers = ',,key,default,en_HLS,en_PRS,nl,nl_HLS,nl_PRS,no,no_HLS,no_PRS,se,se_HLS,se_PRS,ch,ch_HLS,ch_PRS,de,de_HLS,de_PRS'.split(",")
def csv = parseCSV((new File("dist/language.csv")).getText('UTF8'), headers);
File fileDir = new File("dist/language.csv");
BufferedReader inx = new BufferedReader(
new InputStreamReader(
new FileInputStream(fileDir), "UTF8"));
String str;
while ((str = inx.readLine()) != null) {
System.out.println(str);
}
inx.close();
def csv2 = parseCSV(str, headers);
headers.each{ header ->
if (header == "ch" && header.equals("key") == false && header.equals("z") == false && header.equals("changed") == false && header != "") {
def code = header.equals("default") ? "en" : header
//System.out.println("Writing to: " + "messages" + code + ".properties")
def toJson = [:]
csv.each{ d ->
def data = d."${header}"
if (d.key != null && d.key != "" && data != null && data != "") {
toJson[d.key] = data
System.out.println(":" + header + " " + d.key + " " + data)
}
}
(new File('./i18n/' + code + ".json")).setText(groovy.json.JsonOutput.toJson(toJson), 'UTF-8')
}
}