그래서 CSV를 쓰려고 했는데 여러줄이 들어간 경우 때문에 안 쓰게 되었다.
이번에 현지화 관련 작업을 하면서 CSV를 쓰자고 생각이 들었고
CSV에서 어떤 방식으로
저장하는지를 연구해보았다. 일단 잘 동작한다.
public static void ParsingCSV(string file_name,ref string[][] ret) { ret = null; string all = ReadAllText(file_name); List<List<string>> lines = new List<List<string>>(); List<string> ln = new List<string>(); StringBuilder sb = new StringBuilder(); bool is_string = false; int last = all.Length - 1; for(int i = 0; i < all.Length;++i) { Char c = all[i]; if (is_string) { if (c == '"') { if (i < last && all[i + 1] == '"') { // " 2개가 연달아나오면 " 문자열을 써주면 된다. sb.Append('"'); ++i; } else { // 문자열이 끝나는 상황 ln.Add(sb.ToString()); sb.Clear(); is_string = false; } } else sb.Append(c); } else { if (c == '"') is_string = true; // 문자열의 시작이다. else if (c == 0x0d) { ++i; // \r\n if (sb.Length > 0) ln.Add(sb.ToString()); lines.Add(ln); sb.Clear(); ln = new List<string>(); } else if (c == ',') { if (sb.Length > 0) { ln.Add(sb.ToString()); sb.Clear(); } else ln.Add(""); } else sb.Append(c); } } if (lines.Count <= 0) return; ret = new string[lines.Count][]; for (int i = 0; i < ret.Length; ++i) ret[i] = lines[i].ToArray(); }
앞으로는 csv로 써보면서 문제 있으면 위 코드를 수정하게 될 것이다.
댓글 없음:
댓글 쓰기