2014-12-04 48 views
0

我有一个cpp文件,其中包含全局数组定义,但不幸的是,编写定义的人没有使用浮点值的文字(1.0f 1.0的instad),所以我决定使用记事本++来做到这一点。该数组定义如下(这是非常大的,像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, 
... 

任何人都可以请帮我带0,0.984314f替换0,0.984314,1,1.0f,线, 1.0f,1.0f使用notepad ++?

回答

1

我会做两个步骤:

步骤1

搜索, *1,

替换, 1.0,(带或不带 “F”)

步骤2

搜索(\d+\.\d+)(?!f)

更换$1f

3

有些人在遇到问题时会想:“我知道,我会用正则表达式。”现在他们有两个问题。

  • JWZ

你并不需要在这里使用正则表达式,只有两个查找/替换操作。

  1. 复制/数组定义粘贴到一个新的文档
  2. 查找/替换所有逗号与f,
  3. 查找/替换所有换行符(可能是\r\r\n\n,取决于平台&其他编辑器( s)使用 - 你必须检查自己),然后0f,用换行符跟着0,。您必须使用“扩展”选项,这是因为特殊字符
  4. 复制/你的数组定义粘贴回原文件
+0

肯定。你是对的。我刚刚用''替换'',然后用''替换','然后一切正常! 完美! :D – mmostajab 2014-12-04 17:03:52

+0

你仍然会以'1f'而不是'1.0f'结尾。但是如果你试图用'1.0f'替换所有'1f',你会错误地用'0.952941.0f'替换'0.952941f','。这正是正则表达式的帮助。 – 2014-12-04 17:05:18

+0

是啊!现在,我面临这个问题!我将遵循这种情况。 – mmostajab 2014-12-04 17:08:36

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"; 
    } 
}