2014-12-04 46 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"; 
    } 
}