반응형
.csv 파일 데이터 리스트를 활용하여 분석 처리 방법
⭕ 윈도우 폼 선언
폴더 안에 있는 모든 .csv 파일을 읽고 2중 리스트에 저장하는 코드
using System;
using System.Collections.Generic;
using System.IO;
using System.Windows.Forms;
namespace BlogUploadWinform
{
public partial class Form1 : Form
{
static int count = 1;
string searchPath = "";
List<List<string>> totalData = new List<List<string>>();
private void button3_Click(object sender, EventArgs e) // 버튼 클릭 시 이벤트 발생
{
FolderBrowserDialog fbd = new FolderBrowserDialog();
if (fbd.ShowDialog() == DialogResult.OK) // 폴더 경로 지정
{
string py = fbd.SelectedPath;
DirFileSearch(py, "csv"); // csv 파일 찾는 함수 호출
}
}
private void DirFileSearch(string path, string file)
{
try
{
string[] dirs = Directory.GetDirectories(path); // 폴더 개수 저장
string[] files = Directory.GetFiles(path, $"*.{file}"); // 파일 개수 저장
foreach (string f in files) // 저장한 파일 개수들을 차례대로 읽기
{
listBox1.Items.Add($"[{count++}] path - {f}"); // 읽은 파일 경로 리스트박스에 호출
searchPath = f;
File_read(); // csv 파일 내용 읽는 함수 호출
}
if (dirs.Length > 0) // 폴더 안에 폴더가 여러개일 경우
{
foreach (string dir in dirs)
{
DirFileSearch(dir, file);
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
}
private void File_read()
{
try
{
using (FileStream fs = new FileStream(searchPath, FileMode.Open)) // 파일 열기
{
using (StreamReader sr = new StreamReader(fs, System.Text.Encoding.Default, false)) // 파일 안에 내용 텍스트 가져오기
{
List<string> fileData = new List<string>(); // 전역변수로 선언 시 메모리 주소값을 넣을 경우가 있다
string lines = null;
while ((lines = sr.ReadLine()) != null) // 파일 안에 텍스트가 없을 때까지 반복
{
if (string.IsNullOrEmpty(lines)) return; // 텍스트가 없으면 File_read 함수 종료
fileData.Add(lines); // 텍스트를 리스트에 저장
}
totalData.Add(fileData); // 2중 리스트에 fileData 리스트 값 저장
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
public Form1()
{
InitializeComponent();
}
}
}
각 메서드의 역할은 다음과 같습니다.
private void button3_Click(object sender, EventArgs e)
이 메서드는 "폴더 선택" 버튼을 클릭했을 때 호출됩니다. 사용자가 폴더를 선택하면, DirFileSearch 메서드를 호출하여 그 폴더 내부에 있는 모든 CSV 파일을 찾습니다.
private void DirFileSearch(string path, string file)
이 메서드는 재귀적으로 호출되며, 지정된 폴더 내부에 있는 모든 파일과 폴더를 검색합니다. 파일을 찾으면, File_read 메서드를 호출하여 그 파일 내용을 읽습니다. 폴더를 찾으면, 다시 이 메서드를 호출하여 해당 폴더 내부를 검색합니다.
private void File_read()
이 메서드는 CSV 파일을 읽어서 그 내용을 2차원 리스트에 저장합니다. 파일을 열고, 한 줄씩 읽어서 리스트에 저장합니다.
🍺 출력 결과
파일 날짜 별로 2중 리스트에 저장
🌲 생각
날짜별로 데이터를 나누고 그 안의 값들을 평균 또는 추출할 때 사용하니 편했다
반응형
'코딩 > C#' 카테고리의 다른 글
[C#] 엑셀처럼 정렬하기 나머지 행들을 같이 정렬하는 방법 (0) | 2023.04.02 |
---|---|
[C#] 2중 리스트 사용하는 방법 (0) | 2023.04.02 |
[C#] string 특정 문자 포함 합치기 [string.Join()] (0) | 2023.04.02 |
[C#] List 데이터 정렬 하는 방법 (0) | 2023.04.02 |
[C#] C#에서 전기자동차 충전소 정보 API를 활용하는 방법 (0) | 2023.04.01 |