首页
社区
课程
招聘
[旧帖] [原创]将粘贴板上的的制表符替换成空格,空格替换成制表符 0.00雪花
发表于: 2012-4-22 11:45 1109

[旧帖] [原创]将粘贴板上的的制表符替换成空格,空格替换成制表符 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直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//