C#

[C#] CSV 파일 읽기

SSABI 2020. 4. 21. 11:45
반응형

CSV는 comma-separated valued의 약자로 쉼표(,)로 분리된 텍스트 파일을 의미합니다.
CSV 파일을 읽기 위해서는 CSV 파일이 필요합니다.
메모장 등으로도 CSV 파일을 만들 수 있지만 저는 엑셀로 만들어 보겠습니다.

엑셀을 실행해서 데이터를 입력합니다.

데이터

A1에 #을 붙이는 이유는 키(Key)라는 것을 알려주기 위함입니다.


입력한 데이터를 파일형식을 CSV UTF-8로 선택해서 저장합니다.

CSV 파일 저장

UTF-8은 거의 모든 언어를 표현할 수 있기 때문에 UTF-8로 저장하는 것을 권장합니다.


CSV 파일을 읽기 위한 코드를 작성합니다. 코드는 다음과 같습니다.

using System;
using System.IO;
using System.Text;

namespace CSVReader
{
  class Program
  {
    static void Main(string[] args)
    {
      string path = "Sample.csv";

      ReadCSV(path);
    }

    static void ReadCSV(string path)
    {
      try
      {
        using (FileStream fs = new FileStream(path, FileMode.Open))
        {
          using (StreamReader sr = new StreamReader(fs, Encoding.UTF8, false))
          {
            string lines = null;
            string[] keys = null;
            string[] values = null;

            while ((lines = sr.ReadLine()) != null)
            {
              if (string.IsNullOrEmpty(lines)) return;

              if (lines.Substring(0, 1).Equals("#"))  // 첫줄에 #이 있을 경우 Key로 처리
              {
                keys = lines.Split(',');            // 콤마로 분리
                keys[0] = keys[0].Replace("#", ""); // "#"을 ""로 교체

                for (int i = 0; i < keys.Length; i++)
                {
                  Console.Write(keys[i]);
                  if (i != keys.Length - 1)
                    Console.Write(", ");
                }

                Console.WriteLine();

                continue;
              }

              values = lines.Split(',');  // 콤마로 분리

              for (int i = 0; i < values.Length; i++)
              {
                Console.Write(values[i]);
                if (i != values.Length - 1)
                  Console.Write(", ");
              }

              Console.WriteLine();
            }
          }
        }
      }
      catch (Exception e)
      {
        Console.WriteLine(e.ToString());
      }
    }
  }
}

위의 코드는 CSV 파일에 있는 데이터를 단순 출력만 하는 예제입니다.
딕셔너리 변수 등을 추가해서 계속 해서 데이터를 가지고 있게 변경할 수도 있습니다.

실행 결과

실행 결과

반응형