MFC 윈도우 프로그래밍을 하다보면 특정 데이터들을 csv파일 형태로
뽑아내야 할 때가 있습니다. 엑셀에서도 열어서 쉽게 자료분석이 가능하기 때문이죠.
아직 배우고 있는 중이고 구현을 목적으로 짠 코드라서 많이 지저분해 보이지만.
csv파일 생성에 필요한 기초적인 내용들이 있으니 참고하시기 바랍니다.
궁금하신 사항 댓글로 달아 놓으시면 답변드리겠습니다. 고수분들의 조언도 환영입니다.
핵심사항
* 파일명 및 경로지정 : 문자열변수.Format()
* 파일 열기 : fopen(파일경로,접근형식)
* 내용 기록 : fwprintf()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | void CDirectionChange2Dlg::OnBnClickedButtonSaveCsv() { //_wsetlocale(LC_ALL, L"kor"); time_t timer; timer = time(NULL); struct tm t; localtime_s(&t,&timer); // 생성되는 csv 파일명에 시간을 넣기 위해 선언해준 넘들 <time.h> 추가필요 wchar_t* wchar_str; char* char_str; int char_str_len; CString strFileName=_T(""); strFileName.Format(_T("c:\\DirectionChange\\%d%d%d_FILE.csv"),t.tm_year+1900,t.tm_mon+1,t.tm_mday); // 만들 파일의 경로및 파일명 설정 wchar_str = strFileName.GetBuffer(strFileName.GetLength()); char_str_len = WideCharToMultiByte(CP_ACP, 0, wchar_str, -1, NULL, 0, NULL, NULL); char_str = new char[char_str_len]; //메모리 할당 WideCharToMultiByte(CP_ACP, 0, wchar_str, -1, char_str, char_str_len, 0,0); // 위 4줄은 문자열변수 내용을 char로 변환하는 과정 FILE* fp ; if((fp=fopen(char_str, "w+")) == NULL) // fopen()의 두번째 파라미터 "w+"는 읽기,쓰기 및 파일이 없을시 생성 하는 기능 { AfxMessageBox(_T("CSV파일을 생성 할 수 없습니다.")); return; fclose(fp); fp= NULL; } else { // fputs("\xEF\xBB\xBF",fp); int i=0; int j=0; int count=0; while(i<509) { if( CSV[i].Dut[j]<0) { fwprintf(fp,_T("0,0")); fclose(fp); fflush(fp); fp= NULL; AfxMessageBox(_T("CSV파일 생성 완료")); break; } if(CSV[i].Dut[j]!=0 && CSV[i].Dut[j]>0) { if(count==0) { fwprintf(fp,_T("%f,%f,%f,%d,%s,X offset,%f \n") , CSV[i].X_Coordinate[j] , CSV[i].Y_Coordinate[j] , CSV[i].Dut[j] , CSV[i].Probe[j] , CSV[i].Direction[j],m_Edit_X_Offset); count+=1; } else if (count==1) { fwprintf(fp,_T("%f,%f,%f,%d,%s,Y offset,%f \n") , CSV[i].X_Coordinate[j] , CSV[i].Y_Coordinate[j] , CSV[i].Dut[j] , CSV[i].Probe[j] , CSV[i].Direction[j],m_Edit_Y_Offset); count+=1; } else fwprintf(fp,_T("%f,%f,%f,%d,%s \n") , CSV[i].X_Coordinate[j] , CSV[i].Y_Coordinate[j] , CSV[i].Dut[j] , CSV[i].Probe[j] , CSV[i].Direction[j]); if(j<29) j++; else i++; } else if (CSV[i].Dut[j]==0.0) { i++; j=0; } } fwprintf(fp,_T("0,0")); fclose(fp); fflush(fp); fp= NULL; AfxMessageBox(_T("CSV파일 생성 완료")); } // TODO: Add your control notification handler code here } | cs |