l**h 发帖数: 893 | 1 CSV Parser, 比如:
输入:
[['John', 'Smith', '[email protected]
/* */', 'Los Angeles', '1'],
['Jane', 'Roberts', '[email protected]
/* */', 'San Francisco, CA', '0'],
['Alexandra "Alex"', 'Menendez', '[email protected]
/* */', 'Miami', '1']]
输出:
John|Smith|[email protected]
/* */|Los Angeles|1
Jane|Roberts|[email protected]
/* */|San Francisco, CA|0
Alexandra "Alex"|Menendez|[email protected]
/* */|Miami|1.
怎么写比较好? | l**h 发帖数: 893 | 2 A家的题,只能用string replacement裸写?
/* */', 'Los Angeles', '1'],
/* */', 'San Francisco, CA', '0'],
/* */', 'Miami', '1']]
/* */|Los Angeles|1
/* */|San Francisco, CA|0
/* */|Miami|1.
【在 l**h 的大作中提到】 : CSV Parser, 比如: : 输入: : [['John', 'Smith', '[email protected] : /* */', 'Los Angeles', '1'], : ['Jane', 'Roberts', '[email protected] : /* */', 'San Francisco, CA', '0'], : ['Alexandra "Alex"', 'Menendez', '[email protected] : /* */', 'Miami', '1']] : 输出: : John|Smith|[email protected]
| w****a 发帖数: 710 | 3 a的高频题,最近面它们家正好准备过。发个我的答案供参考吧,感觉应该可以写得更
简单一些。
vector parse_csv(string csv) {
vector ret;
string buffer;
bool in_quote = false;
for (int i = 0; i < csv.size(); ++i) {
string append(1, csv[i]);
if (csv[i] == '"') {
if (i + 1 < csv.size() && csv[i + 1] == '"') ++i;
else append = "";
in_quote = !in_quote;
}
if (csv[i] == ',' && !in_quote) {
ret.push_back(buffer);
buffer = append = "";
}
buffer += append;
}
if (!buffer.empty()) ret.push_back(buffer);
return ret;
} | e***i 发帖数: 231 | 4 用python。
a=[['John', 'Smith', '[email protected]
/* */', 'Los Angeles', '1'], ['Jane', '
Roberts', '[email protected]
/* */', 'San Francisco, CA', '0'], ['Alexandra "Alex"', '
Menendez', '[email protected]
/* */', 'Miami', '1']]
for x in a:
print '|'.join(x)
/* */', 'Los Angeles', '1'],
/* */', 'San Francisco, CA', '0'],
/* */', 'Miami', '1']]
/* */|Los Angeles|1
/* */|San Francisco, CA|0
/* */|Miami|1.
【在 l**h 的大作中提到】 : CSV Parser, 比如: : 输入: : [['John', 'Smith', '[email protected] : /* */', 'Los Angeles', '1'], : ['Jane', 'Roberts', '[email protected] : /* */', 'San Francisco, CA', '0'], : ['Alexandra "Alex"', 'Menendez', '[email protected] : /* */', 'Miami', '1']] : 输出: : John|Smith|[email protected]
| l**h 发帖数: 893 | 5 写了个java的:
String toCsv(String str) throws Exception {
boolean insideQuote = false;
Stack stack = new Stack();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (c == '[') {
stack.push(c);
} else if (c == ']') {
if (stack.isEmpty() || stack.peek() != '[') {
throw new Exception("Found unmatched ]");
}
stack.pop();
sb.append("n");
} else if (c == ''') {
insideQuote = !insideQuote;
} else if (c == ',') {
// only append '|' if comma is in the most inner element
if (!insideQuote && stack.size() > 1) {
sb.append("|");
}
} else if (c == ' ') {
if (insideQuote) {
sb.append(c);
}
} else {
sb.append(c);
}
}
return sb.toString();
}
【在 w****a 的大作中提到】 : a的高频题,最近面它们家正好准备过。发个我的答案供参考吧,感觉应该可以写得更 : 简单一些。 : vector parse_csv(string csv) { : vector ret; : string buffer; : bool in_quote = false; : for (int i = 0; i < csv.size(); ++i) { : string append(1, csv[i]); : if (csv[i] == '"') { : if (i + 1 < csv.size() && csv[i + 1] == '"') ++i;
|
|