我有一个包含全局数组定义的cpp文件但不幸的是,编写定义的人没有使用浮点值的文字(1.0f instad of 1.0),所以我决定使用notepad ++来做到这一点。数组定义如下(它非常大,如10000行代码):
const float ifxColorMap::ifxColorScaleCSTFire[] =
{
0, 1, 1,1.0f,
0, 0.984314, 1,1.0f,
0, 0.968627, 1,1.0f,
0, 0.952941, 1,1.0f,
0, 0.937255, 1,1.0f,
0, 0.921569, 1,1.0f,
0, 0.905882, 1,1.0f,
...
任何人都可以帮助我使用notepad ++替换0,0.984314,1,1.0f,0,0.984314f,1.0f,1.0f?
答案 0 :(得分:3)
有些人在面对问题时会想“我知道,我会使用正则表达式”。现在他们有两个问题。
这里不需要使用正则表达式,只需要两次查找/替换操作。
f,
\r
,\r\n
或\n
,具体取决于所使用的平台和其他编辑器 - 您必须亲自检查)然后是0f,
,换行后跟0,
。由于特殊字符答案 1 :(得分:1)
我会分两步完成:
第1步:
搜索, *1,
替换, 1.0,
(有或没有“f”)
第2步:
搜索(\d+\.\d+)(?!f)
替换$1f
答案 2 :(得分:0)
我还用一小块代码解决了这个问题:
#include <iostream>
#include <fstream>
#include <string>
void main()
{
std::ifstream inFile("in.txt");
std::ofstream outFile("out.txt");
char line[401];
char buffer[401];
int bufCounter = 0;
while(!inFile.eof())
{
inFile.getline(line, 400);
size_t len = strlen(line);
for(size_t i = 0; i < len; i++)
{
if(line[i] == ',')
{
buffer[bufCounter] = '\0';
if(buffer[bufCounter-1] != 'f')
{
// has dot inside
size_t j = 0;
for(; j < bufCounter; j++)
if(buffer[j] == '.')
break;
if(j == bufCounter)
outFile << buffer << ".0f, ";
else
outFile << buffer << "f, ";
}
else
outFile << buffer << ", ";
bufCounter = 0;
}
else
{
if(line[i] == ' ' || line[i] == '\t')
;// Do Nothing
else
buffer[bufCounter++] = line[i];
}
}
outFile << "\n";
}
}