[태그:] <span>CSV 파일 입출력</span>

안녕하세요. 언제나 휴일에 언휴예요.

이번 강의에서는 데이터 분석에서 많이 사용하는 “CSV” 포멧의 파일 입출력을 알아볼게요.

CSV 파일은 데이터를 콤마를 기준으로 열거합니다.

이를 엑셀 등의 프로그램으로 보면 테이블 형태로 확인할 수가 있죠.

여러분들이 CSV 파일 포멧으로 데이터를 기록할 때 주의할 점은 데이터 내용에 콤마가 있다면 다른 문자로 변경한 후에 저장하세요. 만약 이를 유지하길 원한다면 다른 포멧의 파일 입출력을 선택하세요.

실습은 동영상 강의와 소스 코드를 참고하세요.

이번 실습에서는 StreamReader 클래스와 StreamWtirer 클래스를 이용하여 입출력합니다.

Book.cs

namespace StreamReader를_이용한_CSV_포멧_파일_입출력
{
    public class Book
    {
        public string Title
        {
            get;
            private set;
        }
        public string Desc
        {
            get;
            private set;
        }
        public string Author
        {
            get;
            private set;
        }
        public Book(string title,string desc,string author)
        {
            Title = title;
            Desc = desc;
            Author = author;
        }
        public override string ToString()
        {
            return Title;
        }
    }
}

BookManager.cs

using System.Collections;
using System.Collections.Generic;
using System.IO;

namespace StreamReader를_이용한_CSV_포멧_파일_입출력
{
    public class BookManager: IEnumerable
    {
        List books = new List();
        public void Add(string title, string desc,string author)
        {
            title = title.Replace(",", " ");
            desc = desc.Replace(",", " ");
            author = author.Replace(",", " ");
            books.Add(new Book(title, desc, author));
        }
        public void Save()
        {
            FileStream fs = File.Create("book.csv");
            StreamWriter sw = new StreamWriter(fs);
            foreach (Book book in books)
            {
                sw.WriteLine("{0},{1},{2}", book.Title, book.Desc, book.Author);
            }
            sw.Close();
            fs.Close();

        }
        public void Load()
        {
            FileStream fs = File.OpenRead("book.csv");
            StreamReader sr = new StreamReader(fs);
            string s;
            string[] sitems;
            while(sr.EndOfStream==false)
            {
                s = sr.ReadLine();
                sitems = s.Split(',');
                books.Add(new Book(sitems[0], sitems[1], sitems[2]));
            }
            sr.Close();
            fs.Close();
        }

        public IEnumerator GetEnumerator()
        {
            return books.GetEnumerator();
        }

        IEnumerator IEnumerable.GetEnumerator()
        {
            return books.GetEnumerator();
        }
    }
}

Program.cs

/* https://ehpub.co.kr
 * CSV 포멧 파일 입출력
 * StreamReader, StreamWriter 이용 */
using System;

namespace StreamReader를_이용한_CSV_포멧_파일_입출력
{
    class Program
    {
        static void Main(string[] args)
        {
            BookManager bm = new BookManager();
            bm.Add("ABC,123", "알파벳과 숫자에 관하여 설명하는 도서", "알번");
            bm.Add("안녕하세요,123", "테스트 프로그램입니다. 그리고, 테스트입니다.", "알번");
            bm.Add("디딤돌", "알파벳과 숫자에 관하여 설명하는 도서", "알번");
            bm.Add("실습으로 다지는", "알파벳과 숫자에 관하여 설명하는 도서", "알번");
            bm.Save();

            BookManager bm2 = new BookManager();
            bm2.Load();
            foreach(Book book in bm2)
            {
                Console.WriteLine("{0}, {1},{2}", book.Title, book.Desc, book.Author);
            }
        }
    }
}

 

C# 실습