-
-
[旧帖] [原创]将粘贴板上的的制表符替换成空格,空格替换成制表符 0.00雪花
-
发表于: 2012-4-22 11:45 1109
-
在QQ空间日志里面粘贴源码,发现制表符都被替换成了一个空格,在百度上发帖子,发现发的帖子,两个换行符变成了空格,一点都不美观,因此用C++写了这个小程序,新手第一次发帖
//制表符替换为空格 void TabToSpace() { LPSTR lpszData = NULL, lpszBuf = NULL; HGLOBAL hMem = NULL; int nLen = 0, cchBuf = 0, i, j; if(::OpenClipboard(m_hDlg)) { if(::IsClipboardFormatAvailable(CF_TEXT)) { hMem = ::GetClipboardData(CF_TEXT); lpszData = (LPSTR)GlobalLock(hMem); nLen = lstrlen(lpszData) + 1; for(i = 0; i<nLen; i++) { if(lpszData[i] == '\t') { cchBuf += 8; } else { cchBuf++; } } lpszBuf = (LPSTR)::GlobalAlloc(GPTR, cchBuf); for(i = 0, j = 0; i<nLen; i++) { if(lpszData[i] == '\t') { lpszBuf[j] = ' '; lpszBuf[j + 1] = ' '; lpszBuf[j + 2] = ' '; lpszBuf[j + 3] = ' '; lpszBuf[j + 4] = ' '; lpszBuf[j + 5] = ' '; lpszBuf[j + 6] = ' '; lpszBuf[j + 7] = ' '; j += 8; } else { lpszBuf[j++] = lpszData[i]; } } ::GlobalUnlock(hMem); ::EmptyClipboard(); ::SetClipboardData(CF_TEXT, lpszBuf); } ::CloseClipboard(); } } //空格替换为制表符 void SpaceToTab() { LPSTR lpszData = NULL, lpszBuf = NULL; HGLOBAL hMem = NULL; int nLen = 0, cchBuf = 0, i, j, n; if(::OpenClipboard(m_hDlg)) { if(::IsClipboardFormatAvailable(CF_TEXT)) { hMem = ::GetClipboardData(CF_TEXT); lpszData = (LPSTR)GlobalLock(hMem); nLen = lstrlen(lpszData) + 1; for(i = 0, n = 0; i<nLen; i++) { if(lpszData[i] == ' ') { if(++n == 8) { cchBuf += 1; n = 0; } } else { while(n != 0) { cchBuf++; n--; } cchBuf++; } } lpszBuf = (LPSTR)::GlobalAlloc(GPTR, cchBuf); for(i = 0, j = 0, n = 0; i<nLen; i++) { if(lpszData[i] == ' ') { if(++n == 8) { lpszBuf[j++] = '\t'; n = 0; } } else { while(n != 0) { lpszBuf[j++] = ' '; n--; } lpszBuf[j++] = lpszData[i]; } } ::GlobalUnlock(hMem); ::EmptyClipboard(); ::SetClipboardData(CF_TEXT, lpszBuf); } ::CloseClipboard(); } } //多行转化成单行 void SingleToMultiline() { LPSTR lpszData = NULL, lpszBuf = NULL; HGLOBAL hMem = NULL; BOOL bFlag; int nLen = 0, cchBuf = 0, i, j, n; if(::OpenClipboard(m_hDlg)) { if(::IsClipboardFormatAvailable(CF_TEXT)) { hMem = ::GetClipboardData(CF_TEXT); lpszData = (LPSTR)GlobalLock(hMem); nLen = lstrlen(lpszData) + 1; for(i = 0, n = 0, bFlag = FALSE; i<nLen; i++) { if(lpszData[i] == 0x0D) { if(bFlag == TRUE) { if(n != 0) { cchBuf += 2; } cchBuf++; } bFlag = TRUE; } else if(lpszData[i] == 0x0A) { if(bFlag == TRUE) { n++; } else { if(n != 0) { cchBuf += 2; } cchBuf++; } bFlag = FALSE; } else { if(n != 0) { cchBuf += 2; } cchBuf++; n = 0; } } lpszBuf = (LPSTR)::GlobalAlloc(GPTR, cchBuf); for(i = 0, j = 0, n = 0, bFlag = FALSE; i<nLen; i++) { if(lpszData[i] == 0x0D) { if(bFlag == TRUE) { if(n != 0) { lpszBuf[j++] = 0x0D; lpszBuf[j++] = 0x0A; } lpszBuf[j++] = lpszData[i]; } bFlag = TRUE; } else if(lpszData[i] == 0x0A) { if(bFlag == TRUE) { n++; } else { if(n != 0) { lpszBuf[j++] = 0x0D; lpszBuf[j++] = 0x0A; } lpszBuf[j++] = lpszData[i]; } bFlag = FALSE; } else { if(n != 0) { lpszBuf[j++] = 0x0D; lpszBuf[j++] = 0x0A; } lpszBuf[j++] = lpszData[i]; n = 0; } } ::GlobalUnlock(hMem); ::EmptyClipboard(); ::SetClipboardData(CF_TEXT, lpszBuf); } ::CloseClipboard(); } } //删除制表符 void DelTab() { LPSTR lpszData = NULL, lpszBuf = NULL; HGLOBAL hMem = NULL; int nLen = 0, cchBuf = 0, i, j; if(::OpenClipboard(m_hDlg)) { if(::IsClipboardFormatAvailable(CF_TEXT)) { hMem = ::GetClipboardData(CF_TEXT); lpszData = (LPSTR)GlobalLock(hMem); nLen = lstrlen(lpszData) + 1; for(i = 0; i<nLen; i++) { if(lpszData[i] != '\t') { cchBuf++; } } lpszBuf = (LPSTR)::GlobalAlloc(GPTR, cchBuf); for(i = 0, j = 0; i<nLen; i++) { if(lpszData[i] != '\t') { lpszBuf[j++] = lpszData[i]; } } ::GlobalUnlock(hMem); ::EmptyClipboard(); ::SetClipboardData(CF_TEXT, lpszBuf); } ::CloseClipboard(); } }
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
赞赏
他的文章
- [分享]把文件的时间都设置成一样 4762
- [讨论]如果把Cookies保存下来,在另一台电脑不知能不能用? 11032
- [原创]一个虚拟桌面程序(源码) 28554
看原图
赞赏
雪币:
留言: