2016-06-03 2 views
0

test.csv 파일을 읽으려고합니다. 이것 같이;CSV 파일 읽기 및 값을 사전에 저장

"test.try1.get1","START" 

"test.try1.get2","Get 111" 
"test.try1.get3","Get 222, 333" 
"test.try1.get4","Get {test}, [{test2}, {test3]" 
"test.try1.get5","Get \"{test}\", [{test2}, {test3]" 


"test.try2.get1","Bla bla bla... bla bla bla... 
Bla bla bla bla bla bla bla... 
Bla bla bla bla bla bla bla... (: 

BLA?" 

"test.try2.get2","Bla bla bla... bla bla bla... 

• 1 - Bla bla bla bla bla bla bla... 
• 2 - Bla bla bla bla bla bla bla... 

Bla bla bla \" bla bla bla bla... (: \" 

BLA?" 

"test.try3.get1","BONUSSS!!!" 
"test.try3.get2","BONUSSS!!! \" " 

"test.try4.get1","END" 

나는 StreamReaderSplit() 기능을 사용하여 각 라인을 분리 할 수를 사용하여 test.csv 파일을 읽을 수 있어요. 각 열을 별도의 사전에 저장 한 다음 표시하고 싶습니다. 처럼 ;

Console.WriteLine(GetText(test.try1.get1)); //OUTPUT: START (WITHOUT (")) 

이 코드는 좋지 않습니다.

- 성능을 어떻게 향상시킬 수 있습니까? -이 코드는 어떻게 단축합니까? -Is "코드 논리가 좋다" - 누군가 도와 줄 수 있습니까? (:

MY 작동하지 않는 코드, 당신은 파일의 크기가 합리적 일 것이라는 점을 보장 할 수있는 경우

public static Dictionary<string, string> texts = new Dictionary<string, string>(); 
    public static void LoadCSV() { 
     using (StreamReader reader = new StreamReader(@"test.csv")) { 

      string total = string.Empty; 
      bool multipleLine = false; 

      while (!reader.EndOfStream) { 
       string line = reader.ReadLine().ToString(); 

       if (!multipleLine && line.StartsWith("\"") && !line.EndsWith("\"") && line != string.Empty) { 
        multipleLine = true; 
       } 

       if(multipleLine && line == string.Empty) { 
        total += "\n\n"; 
        continue; 
       } 

       if (!multipleLine && line == string.Empty) { 
        continue; 
       } 

       if (multipleLine && !line.StartsWith("\"") && !line.EndsWith("\"") && line != string.Empty) { 
        total += line; 
        continue; 
       } 
       else if (multipleLine && !line.StartsWith("\"") && line.EndsWith("\"") && line != string.Empty) { 
        total += line; 
        multipleLine = false; 
       } 

       if (!multipleLine && line.StartsWith("\"") && line.EndsWith("\"") && line != string.Empty) { 
        total = line; 
       } 

       string[] splitted = total.Split(','); 

       if (!texts.ContainsKey(splitted[0])) { 
        //Index out of range 
        texts.Add(splitted[0].Replace("\"", string.Empty), splitted[1]); 
        Console.WriteLine(string.Format("ADDED : {0} , {1}", splitted[0], splitted[1])); 
       } 

       total = string.Empty; 
       multipleLine = false; 
      } 
     } 
    } 
+1

내가 당신이 보는 것을 권 해드립니다 CSV 파싱 라이브러리를 사용합니다. – juharr

답변