프로그래밍/C#

[C#] CSV 파일을 읽어서 표로 나타내보자 - DatagridView

Dibrary 2021. 8. 2. 10:03
반응형

안녕하세요, Dibrary입니다.

이번에는 .csv 파일의 내용을 읽어다가 DataGridView로 띄우는 것을 해볼 겁니다.

먼저, .csv파일은 뭘까요? 간단하게 콤마로만 연결된 데이터가 있는 파일입니다.

제가 사용할 csv파일의 내용입니다.

보시면 '숫자,숫자' 이렇게만 되어 있죠? 

숫자,숫자,숫자,숫자,.... 여러 개가 있다고 해도 콤마로만 구성되면 csv 파일입니다. 

굳이 파일을 열지 않더라도, 파일명을 잘 보시면 'spectrometer_data.csv' 로 되어 있죠?

끝에 .csv로 끝나면 csv파일입니다.

 

이 파일을 읽어와서 표로 띄워볼 생각입니다.

먼저 프로젝트를 생성해 주세요.

저는 기본 폼 위에 버튼과 ,datagridview 를 위치시켰습니다. (드래그 앤 드롭 하는거 잊지 않으셨죠?)

그리고 버튼을 더블클릭해서 소스코드 수정 부분으로 들어갑니다.

코드 상단에 using System.IO; 가 반드시 있어야 합니다. 그냥 미리 써두면 편합니다.

그리고 위와 같이 코드를 입력해보세요.

코드를 설명해보면,

1. List<String> x = new List<String>( );

이 코드는 x라는 변수를 만든 것인데, 이 변수는 string자료형이 들어가는 리스트 인 셈입니다.

배열이 아니라 리스트로 만들었죠? 그 이유는 배열은 처음에 갯수를 지정해야 하는데,

저는 지금 .csv파일 안에 데이터가 몇 개 있는지 모르는 것을 가정했습니다. 

갯수가 몇 개 있을 지 모를때는 리스트를 써야 합니다. (자료구조와 관련이 있죠)

이 객체는 사실 여기서 쓰지 않습니다. 그저, csv데이터를 담아두는 용도로 쓰려고 만들어 놓은 것입니다.

 

2. StreamReader file = new StreamReader("경로:\\csv파일 이름");

실제 이 코드가 파일을 읽어오는구나~ 하는 느낌이 나실 겁니다. 

네 .csv파일을 읽어오는게 이 객체입니다. 의아해 보이실 수 있는데 제 코드에는 경로가 안 적혀 있죠?

저는 .csv파일을 해당 프로젝트의 bin\Debug 폴더 안에 넣어놓았기 때문입니다.

파일탐색기로 보면, 

이게 제 프로젝트 폴더가 위치한 곳입니다. read_CSV 보이죠? 안으로 들어가보죠.

안에 bin폴더가 있는게 보이죠?  그 안으로 들어가보죠

그 안에는 Debug밖에 없습니다. Debug폴더 안으로 들어가보죠

.csv파일이 위치한 bin\Debug경로

네 드디어 찾았네요. 이렇게 bin\Debug안에 넣어 두면, 파일을 불러올 때, 별도의 경로를 입력해주지 않아도 됩니다.

만일 경로가 다르다면 \\를 사용해서 경로를 입력해 주시면 됩니다.

 

3. Datatable table = new DataTable( );

이 코드는 Datatable이라는 객체를 table이라는 이름으로 만든 겁니다.

 

4. table.Columns.Add("WaveLength");

이 코드는 table 객체의 첫번째 column명을 WaveLength라고 지정한 것입니다.

위 코드에서는 Columns.Add를 두 번 했으니, column명이 2개가 생기겠죠?

사실 이는 data의 column수와 일치하게 해 주셔야 합니다.

 

5. while(!file.EndOfStream)

이는 whlie 무한루프인데, file의 끝이 아닌 경우 계속 반복하라는 의미입니다.

 

6. string line = file.ReadLine( );

이 코드는 file의 줄 하나를 읽는데, line이라는 객체명으로 저장한다는 것입니다.

 

7. string[ ] data = line.Split(',');

읽어온 line 객체를 콤마를 기준으로 잘라서 data라는 변수에 저장합니다. 우리가 아까 본 데이터는 콤마가 하나 였으니까, 들어가는 데이터는 2개씩 전체 줄 갯수만큼의 데이터가 들어가겠죠?

 

8. table.Rows.Add(data[0], data[1]);

data의 0번째 값과 1번째 값을 Rows에 넣습니다. 아까 콤마 하나를 기준으로 숫자, 숫자 이런 데이터였죠?

그럼 앞의 숫자가 0번째 인덱스의 data 값이 되고, 뒤의 숫자가 1번째 인덱스의 data 값이 됩니다.

 

9. x.Add(data[0]);

맨 처음에 만든 x객체에 data[0]의 값 즉, 아까 자른 숫자의 앞 숫자를 x에 저장합니다. 

x와 y객체는 이렇게 읽어온 csv파일의 데이터를 저장하는 용도로 사용하려고 만든 것이라, 이렇게 저장하는 겁니다.

 

10. dataGridView1.DataSource = table;

이게 핵심입니다!. 우리가 일일이 불러오고, 콤마를 기준으로 자르고, row에 데이터 넣은 그 table객체를 dataGridView1객체에 세팅합니다. 

말 그대로, 우리가 불러와서 표로 만든 것을 dataGridView1에 띄우는 것이라고 보면 됩니다.

 

코드가 좀 복잡했죠? 화면은 과연 어떻게 보일까요?

네 예상한 대로, 앞의 숫자와 뒤의 숫자로 구성되네요 (위에 column명이 2개 나온 것은 데이터의 오류입니다. 제가 csv파일 안에도 wavelength,intensity를 넣어놨네요;;)

여기까지 csv파일을 읽어서 datagridview에 띄우는 방법을 보았습니다.

728x90
반응형