Dart:
CSV와 함께 작업하기

어떻게 할까요:

Dart에서 CSV 파일을 다루기 위해, 일반적으로 텍스트를 수동으로 처리하거나 작업을 단순화하기 위해 제3자 라이브러리를 사용합니다. 여기서는 두 가지 접근법 모두를 살펴볼 것입니다.

수동으로 CSV 파싱하기

당신의 요구사항이 단순하다면, CSV 문자열을 수동으로 파싱하기로 선택할 수 있습니다. 이는 Dart의 핵심 문자열 조작 함수를 사용하여 달성할 수 있습니다:

void main() {
  // 샘플 CSV 데이터
  String csvData = "Name,Age,Email\nJohn Doe,30,[email protected]\nJane Smith,25,[email protected]";
  
  // CSV 데이터를 줄로 분할하기
  List<String> lines = csvData.split('\n');
  
  // 각 줄 파싱하기
  List<Map<String, String>> data = [];
  List<String> headers = lines.first.split(',');
  
  for (var i = 1; i < lines.length; i++) {
    List<String> row = lines[i].split(',');
    Map<String, String> record = {};
    for (var j = 0; j < headers.length; j++) {
      record[headers[j]] = row[j];
    }
    data.add(record);
  }
  
  // 파싱된 데이터 출력하기
  print(data);
}

// 샘플 출력:
// [{Name: John Doe, Age: 30, Email: john@example.com}, {Name: Jane Smith, Age: 25, Email: jane@example.com}]

제3자 라이브러리 사용하기: csv

더 복잡한 시나리오를 위해 혹은 코드를 단순화하기 위해, csv와 같은 인기 있는 제3자 라이브러리를 사용할 수 있습니다. 먼저, 당신의 프로젝트에 추가하기 위해 dependencies 아래 pubspec.yaml 파일에 csv: ^5.0.0 (또는 최신 버전)을 포함시키세요. 그런 다음 다음과 같이 사용하세요:

import 'package:csv/csv.dart';

void main() {
  String csvData = "Name,Age,Email\nJohn Doe,30,[email protected]\nJane Smith,25,[email protected]";
  
  // CsvToListConverter를 사용하여 CSV 데이터 파싱하기
  List<List<dynamic>> listData = const CsvToListConverter().convert(csvData);
  
  // 첫 번째 리스트 항목은 헤더를 포함함
  List<String> headers = listData.first.map((item) => item.toString()).toList();
  
  // 처리를 계속하기 전에 헤더 행을 제거하기
  listData.removeAt(0);
  
  // 더 구조화된 형식으로 변환하기 위해 List<Map<String, dynamic>>로 변환하기
  List<Map<String, dynamic>> mappedData = listData.map((list) {
    Map<String, dynamic> map = {};
    for (int i = 0; i < headers.length; i++) {
      map[headers[i]] = list[i];
    }
    return map;
  }).toList();
  
  // 매핑된 데이터 출력하기
  print(mappedData);
}

// 샘플 출력:
// [{Name: John Doe, Age: 30, Email: john@example.com}, {Name: Jane Smith, Age: 25, Email: jane@example.com}]

두 가지 방법 모두 CSV 데이터를 다루는 방법을 보여줍니다: 첫 번째는 학습 목적이나 매우 단순한 CSV 구조를 다룰 때 수동으로; 두 번째는 파싱을 단순화하고 CSV 포매팅의 다양한 복잡성을 처리할 수 있는 강력한 라이브러리를 활용하여 진행합니다.