C에서 CSV 파일을 읽는 방법

CSV 파일을 제공하는 프로그램의 설명서를 참조하십시오. 각 행의 필드 수와 각 필드의 형식을 결정하십시오. 예를 들어 프로그램이 1, "test", 34.5 데이터가 포함된 CSV를 제공하는 경우 정수, 문자열 및 부동 소수점 숫자의 세 필드를 표시합니다.

CSV에서 식별된 각 필드에 대한 데이터 멤버를 포함하는 구조를 만듭니다. 제공된 예제 라인 1, "test", 34.5를 사용하면 다음 구조가 필요합니다. struct data { int col1; char *col2; 플로트 col3; };

프로그램에서 CSV 파일 읽기를 처리할 메서드를 만듭니다. 이것은 프로그램의 나머지 부분에서 액세스할 수 있어야 하며 다른 메서드가 읽은 데이터에 액세스할 수 있도록 공통 데이터 구조에서 작업해야 할 것입니다. 반환 값이 필요하지 않도록 매개변수를 참조로 전달하십시오. 예제 함수 프로토타입은 다음과 같습니다. void ParseCSV( char *filename, data& input );

다음 코드를 사용하여 데이터를 읽을 파일 개체를 만듭니다. FILE * pInput;

파일의 한 줄을 한 번에 저장할 수 있을 만큼 충분히 큰 문자 버퍼를 만듭니다. 언어의 제약으로 인해 가장 간단한 방법은 다음과 같이 충분히 큰 크기의 문자 배열을 선언하는 것입니다. #define BUFFER_SIZE 1024

다음 코드를 사용하여 파일을 열고 이전에 만든 FILE 개체에 할당합니다. pInput = fopen("filename," "r")

fgets(buf, sizeof(buf), pInput)

"strtok" 기능을 사용하여 CSV를 구문 분석합니다. 토큰을 가리키는 새 문자열을 만들고 위에서 읽은 줄의 데이터로 초기화합니다. char *tok = strtok (buf, ",")

수신된 토큰을 적절한 데이터로 변환합니다. 예제 행 사용: 1, "test", 3.45 다음 코드를 사용하여 "tok"에 포함된 데이터를 정수로 변환합니다. row.col1 = atoi (tok);

같은 줄에서 연속적으로 읽을 경우 이전에 읽은 버퍼 문자열 대신 "strtok"에 NULL 매개변수를 전달합니다. tok = strtok(NULL, ",") 그런 다음 토큰을 적절한 데이터 유형으로 변환합니다. 예제 줄 1,"test",3.45 사용 한 줄에 대한 구문 분석 코드는 다음과 같습니다. char *tok = strtok(buf, ","); row.col1 = atoi(톡); tok = strtok(NULL, ","); row.col2 = 톡; tok = strtok(NULL, ","); row.col3 = atof(톡);

CSV의 각 줄에 있는 모든 항목에 대해 이 작업을 수행합니다. "strtok" 함수는 버퍼의 데이터가 모두 소진될 때까지 쉼표 값 사이의 데이터를 계속 제공하며, 이 시점에서 NULL을 반환합니다. 이것은 라인 작업을 마쳤음을 나타냅니다.

경고

"fopen" 함수는 오류가 있는 경우 NULL을 반환할 수 있습니다. 사용하기 전에 파일을 확인하십시오. 경우에 따라 제공된 토큰이 예상 형식이 아닐 수 있습니다. 맹목적으로 변환하기 전에 일반적인 오류 값(빈 문자열, NULL 등)을 확인하여 데이터를 검사해야 합니다.