본문 바로가기

[C#] CSV 파일 읽기

C#
·
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 파일에 있는 데이터를 단순 출력만 하는 예제입니다.
딕셔너리 변수 등을 추가해서 계속 해서 데이터를 가지고 있게 변경할 수도 있습니다.

실행 결과

실행 결과

반응형
블로그 이미지
Frontend Engineer

댓글