일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 안드로이드 gcm
- dovecot
- html5
- soundpool
- php 취약점
- xe
- mysql
- Mail Server
- 안드로이드 푸시
- WebView
- 자바스크립트
- 우분투
- 안드로이드 푸쉬
- PHP
- Android
- android 효과음
- 자동 생성
- FCM
- C# IO
- UML
- 폼메일
- roundcube
- 설치
- chart.js
- javascript
- not working
- C#
- curl
- php 시큐어코딩
- 안드로이드
- Today
- Total
그러냐
[C#]CSV파일 읽어 처리하는 방법 본문
Written by 김영일(Youngil Kim), C#.NET Developer
CSV파일을 읽어 처리하는 경우에는 ,(콤마)가 필드마다 포함되어 있거나 필드가 "로 둘러쌓여 있는가 있어 번거로운 작업이 되는 경우가 있습니다.
참고로 CSV파일 사양에 대한 스펙은 RFC4180을 기준으로 이야기합니다.
관련 URL: http://www.ietf.org/rfc/rfc4180.txt
그래서 .NET Framework 2.0에서 혹시 좀더 편리하게 처리해줄 수 있는 메소드가 있는지 찾아보니 있더군요. Microsoft.VisualBasic.FileIO네임스페이스의 TextFieldParser클래스로 이 클래스를 사용하여 CSV파일을 읽어 각 필드의 문자열 얻어 낼 수 있습니다. 물론 C#에서 사용가능 합니다. ^^
우선 이 클래스를 사용하기 위해 CSV파일을 처리하는 상위 트랙터를 지정하여 인스턴스를 생성하고 CSV파일에 한국어가 포함되어 있는 경우를 대비하여 아래 소스코드처럼 코드를 지정합니다.
TextFieldParser ps = new TextFieldParser("sample.cvs", System.Text.Encoding.GetEncoding("EUC_KR"));
다음 TextFieldType속성에 FieldType.Delimited를 설정합니다. 또한, SetDelimiters메소드를 호출하여 단락문자를 설정해줍니다. 여기서는 CSV이기 때문에 콤마를 지정합니다.
ps.TextFieldType = FieldType.Delimited;
ps.SetDelimiters(",");
그리고 ReadFields메소드를 호출할 때마다, CSV파일을 한행씩 읽고 읽은행의 전체 필드를 문자열 배열로 리턴해줍니다.
while (!ps.EndOfData)
{
string[] row = ps.ReadFields();
// 배열Row 요소는 읽은행의 각 필드값
}
[CSVConv.cs]
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.VisualBasic.FileIO;
namespace CSVConv
{
class Program
{
static void Main(string[] args)
{
TextFieldParser ps = new TextFieldParser("sample.csv", System.Text.Encoding.GetEncoding("EUC-KR"));
using (ps)
{
ps.TextFieldType = FieldType.Delimited;
ps.SetDelimiters(",");
while (!ps.EndOfData)
{
string[] row = ps.ReadFields();
foreach (string fd in row)
{
string f = fd;
f = f.Replace("\r\n", "n");
f = f.Replace(" ", "_");
Console.WriteLine(f + "\t");
}
Console.WriteLine();
}
}
}
}
}
"로 둘러쌓여있는 필드나 개행문자가 있는 필드도 정확하게 처리되는 것을 확인할 수 있습니다.
▨ HasFIeldsEnclosedInQuotes 속성
모든 필드가 콤마로 구분되어 있는 것을 처리하고 싶은 경우 이 속성값을 false로 설정합니다.
▨ TimeWhiteSpace 속성
필드 앞뒤로 공백문자를 게거 하고 싶지 않는 경우 이 속성을 false로 설정합니다. 단, "로 둘러쌓인 필드는 "로 쌓여진 내부의 공백은 제거되지 않습니다.
'c#' 카테고리의 다른 글
[c#] 시스템정보가져오기 (0) | 2016.01.28 |
---|---|
[c#]ip주소 mac주소 알아내기 (0) | 2016.01.28 |
엑셀의 CSV파일형태로 저장하기 (0) | 2016.01.28 |
c# - exel write시 셀서식 지정 (0) | 2016.01.28 |
C#– Windows 환경에 따른 Control Layout 불일치 (0) | 2016.01.28 |