<

코드를 짜다 보면 빈줄을 정리하고자 할때가 자주 있다.


여려명이 작업한 코드를 Merge한다거나, 외부 소스를 사용한 경우, 테스트를 마치고 최적화 단계, 그냥 빈줄이 너무 많아 보기 싫어서..


한두줄이면 그냥 지우는데 10줄이 넘어가면 슬슬 지루하고 짜증이 나기 마련..


찾아보니 간단한 정규식으로 빈줄만 삭제가 가능하다.



VisualStduio에서 찾기 및 바꾸기 (단축기 Ctrl + Shift + F)

^(?([^\r\n])\s)*\r?$\r?\n


찾을 내용에 위 문자열을 넣고 바꿀내용은 비워둔 상태에서 정규식 사용에 체크하고 사용하면 된다.


찾는 위치를 선택영역 또는 현재문서로 한정해서 사용해야한다. 


보통 이 항목이 전체 솔루션으로 되있는데 이상태에서 모두 바꾸기를 해버리면 리소스 파일까지 바꿔버리니, 꼭 선택영역이나 현재문서로 한정해서 사용하자.


선택영역은 말그대로 빈줄을 삭제할 영역을 블록 씌운 상태에서 해당 선택 내용안에서만 찾겠다는 거다.


VisualStudio 2013에서 잘 작동한다.


출처 : http://kjcoder.tistory.com/632 


알파벳 대소문자, 숫자를 포함한 랜덤한 문자열을 생성하는 함수



출처는 StackOverflow

void gen_random(char *s, const int len)
{
	static const char alphanum[] =
		"0123456789"
		"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
		"abcdefghijklmnopqrstuvwxyz";

	for (int i = 0; i < len; ++i) {
		s[i] = alphanum[rand() % (sizeof(alphanum) - 1)];
	}

	s[len] = 0;
}

여기에 문자 중복이 안되게끔 하거나, 특수문자를 추가하는 방법도 고려해봐야겠다.


C#에서는 FILE 핸들러로 바로 확인이 가능한데 C++는 한줄에 쓰기 번거러워 따로 함수를 만들어서 사용한다.


유니코드가 아닌 프로젝트도 있어 분기처리 해준다.



bool isExistFile(CString _strFile)
{
#ifdef _UNICODE
	return(_waccess_s(_strFile, 0) != -1);
#else
	return (_access_s(_strFile, 0) != -1);
#endif
	
}


MFC에서 ComboBox(콤보박스) 사용시 사용자가 임의적으로 항목을 수정할 수 있다.


물론 수정된 값을 받는 경우도 있지만, 해당 선택된 항목의 index값을 가져와서 쓰는경우 매개변수가 잘못되었다는 등의 오류가 발생 할 수 있다.


사용자가 수정할 항목이 아닌 경우라면 이를 ReadOnly로 바꿔줄 필요가 있다.


ReadOnly 설정은 따로 코드를 수정하는 경우도 있지만, 간단하게 해당 리소스 속성항목에서 


Type를 "Drop List"로 바꿔주면 된다.


아래는 Reference에 나와있는 Style Type별 상태

StyleWhen is list box visibleStatic or edit control
SimpleAlwaysEdit
Drop-downWhen dropped downEdit
Drop-down listWhen dropped downStatic


SI 기본 단위의 정의



SI 접두어


CFileDialog 클래스는 흔히 사용되는 파일열기, 폴더 열기 등 FileOpen 다이얼로그를 생성하는 클래스이다.

자세한 내용은 레퍼런스를 참고하자.(https://msdn.microsoft.com/ko-kr/library/dk77e5e7.aspx#cfiledialog__cfiledialog)


아래는 레퍼런스에 나와있는 CFileDialog 생성자이다.

CfileDialog는 객체 생성시에 추가로 인자값을 넣어주어야 한다.


explicit CFileDialog(
	BOOL bOpenFileDialog,  //TRUE : 파일 열기, FALSE : 다른 이름으로 저장 대화 상자
	LPCTSTR lpszDefExt = NULL,  //기본 파일 이름 확장자
	LPCTSTR lpszFileName = NULL,  //초기 파일 이름, 파일명 지정하는 edit컨트롤 기본 내용
	DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,  //대화상자 

	/*

	- OFN_EXPLOPER     윈도우 탐색기 스타일
	- OFN_ARROWMULTISELECT       파일을 한번에 여러개 선택 가능
	- OFN_CREATEPROMPT         존재하지 않는 파일명을 입력했을 경우 새로 생성하겠냐는 메시지 박스 출력
	- OFN_FILEMUSTEXIST     존재하지 않는 파일명을 입력할 수 없도록 함
	- OFN_HIDEREADONLY      읽기 전용 파일은 출력하지 않음
	- OFN_LONGNAMES          긴 파일 이름 포맷 지원
	- OFN_OVERWRITEPROMPT  존재하는 파일명을 입력했을 경우 덮어쓰겠냐는 메시지 박스 출력
	- OFN_PATHMUSTEXIST      이미 존재하는 디렉터리명만을 입력


	//2개 이상의 플래그를 이용하고자 하는 경우 '|' 기호로 구분하여 사용한다.
	*/
	LPCTSTR lpszFilter = NULL,  //확장자 필터
	CWnd* pParentWnd = NULL,
	DWORD dwSize = 0,
	BOOL bVistaStyle = TRUE);


****************** CFileDialog 클래스의 멤버 함수
CString GetPathName       선택된 파일의 절대 경로
CString GetFileName        선택된 파일의 이름과 확장자
CString GetFileExt            선택된 파일의 확장자
CString GetFileTitle           선택된 파일의 파일명
BOOL GetReadOnlyPref     읽기 전용 여부

POSITION GetStartPosition           다중 선택의 경우
CString GetNextPathName



******************CFileDialog 클래스의 인스턴스를 선언하고 DoModal 함수 호출

** 한개의 파일만 선택할 경우
char szFilter[] = "Image (*.BMP, *.GIF, *.JPG) | *.BMP;*.GIF;*.JPG | All Files(*.*)|*.*||";
CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY, szFilter);
if(IDOK == dlg.DoModal())
{
        CString strPathName = dlg.GetPathName();
}


** 여러개의 파일을 복수 선택할 경우

char szFilter[] = "All Files(*.*) | *.* ||";
CFileDialog dlg(TRUE, NULL, NULL, OFN_ALLOWMULTISELECT, szFiilter);

if(IDOK == dlg.DoModal())
      for(POSITION pos=dlg.GetStartPosition(); pos != NULL;)
               m_ctrlListBox.AddString(dlg.GetNextPathName(pos));



Get으로 멤버함수를 찾으면 될듯 하다..

+ Recent posts