아두맨 아이디어 창작소

아두맨

아이디어 창작 도우미

    코딩/C#

    [C#] .csv 파일 읽기 쓰기

    아두맨 2023. 4. 2. 14:11

     

    .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

    '코딩/C#'의 다른글

    • 현재글[C#] .csv 파일 읽기 쓰기

    관련글

    • [C#] 엑셀처럼 정렬하기 나머지 행들을 같이 정렬하는 방법 2023.04.02
    • [C#] 2중 리스트 사용하는 방법 2023.04.02
    • [C#] string 특정 문자 포함 합치기 [string.Join()] 2023.04.02
    • [C#] List 데이터 정렬 하는 방법 2023.04.02
    프로필사진

    아이디어를 실현시켜드립니다!

    • 최신글 전체보기 (29)
      • 코딩 (10)
        • Python (4)
        • C# (6)
      • ESP32 (12)
        • 장치설정 (9)
        • 센서활용 (2)
        • ESP32 프로젝트 (1)
      • 아두이노 (4)
        • 장치설정 (3)
        • 아두이노 프로젝트 (1)
      • 라즈베리파이 (1)
        • 라즈베리파이 프로젝트 (1)
      • 블로그 관련 (1)

    최근글과 인기글

    • 최근글
    • 인기글

    공지사항

    Tag

    라즈베리파이, wokwi, 딥슬립, 웹, 2중 리스트, st7789, 시제품, deepsleep, c#, 의뢰, LED, 2중리스트, 아두이노 딥슬립, 전력관리, 데이터, Arduino, 개발, 아두맨, ESP32, 아두이노,

    최근댓글

    Copyright 아두맨. All rights reserved.

    티스토리툴바