我有一个以管道分隔和半固定宽度的文件。我的意思是,这些值看起来像这样:
void CMyWnd::foo()
{
CWnd *check = GetDlgItem(IDC_CHECK1);
if (check)
{
CString str;
check->GetWindowText(str);
CClientDC dc(this);
dc.SelectObject(GetFont());
int width = dc.GetTextExtent(str).cx; //get width
//test to see where the lines are
CRect rcheck;
check->GetWindowRect(&rcheck); //rect in screen coordinates
POINT pt = { 0 };
ScreenToClient(&pt);
rcheck.OffsetRect(pt); //rect is relative to top-left of parent
dc.SelectObject(GetStockObject(NULL_BRUSH));
dc.SelectObject(GetStockObject(BLACK_PEN));
dc.MoveTo(rcheck.right, rcheck.bottom + 1);
dc.LineTo(rcheck.right - w, rcheck.bottom + 1);
}
}
我的目标是删除所有开始的空格,尾随空格,以及空分隔符中有空格的部分(例如,您在上面的四到六之间看到)。完成后,我打算在Excel中使用该文件。
我知道我可以通过将整个文件导入Excel并执行 TRIM()命令来处理空白区域,但这对于非常“宽”的文档非常耗时。
我目前的解决方案是使用Notepad ++解决这个问题,并使用一系列查找和替换命令:
one|two two|three three | four four| | six six |seven seven
eight eight| nine nine |
(\S+)\s+[|]
\1|
([|])\s+([A-Za-z])
\1\2
[|]\s+[|]
...然后导入Excel。
我可以使用更简单的单一查找和替换命令,还是应该将它们放在宏中?
答案 0 :(得分:2)
怎么样:
找到:\s*\|\s*
替换为:|
修改强>
将\s
更改为\h
以避免匹配换行符。 \h
代表水平空格:
找到:\h*\|\h*
替换为:|
答案 1 :(得分:0)
这听起来像是一个愚蠢的答案,但这就是我要这样做的方式。
打开替换并输入“|”并在替换put“|”中,点击替换直到你得到0更改。
然后用“|”做同样的事情并取代“|”
最后用“”(两个空格)和“”(一个空格)来做。
如果这不是你想要的,我道歉。我还不能发表评论。