Regex 在记事本中更换++;使用正则表达式

Regex 在记事本中更换++;使用正则表达式,regex,notepad++,Regex,Notepad++,我有一个cpp文件,其中包含一个全局数组定义,但不幸的是,编写定义的人没有将文本用于浮点值(1.0f instad of 1.0),所以我决定使用notepad++。数组定义如下(非常大,大约10000行代码): 有人能帮我用记事本++将0,0.984314,1,1.0f替换为0,0.984314f,1.0f,1.0f吗 有些人在遇到问题时会想“我知道,我会使用正则表达式。”现在他们有两个问题 JWZ 这里不需要使用正则表达式,只需要两个查找/替换操作 将数组定义复制/粘贴到新文档 用f查找

我有一个cpp文件,其中包含一个全局数组定义,但不幸的是,编写定义的人没有将文本用于浮点值(1.0f instad of 1.0),所以我决定使用notepad++。数组定义如下(非常大,大约10000行代码):

有人能帮我用记事本++将0,0.984314,1,1.0f替换为0,0.984314f,1.0f,1.0f吗

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

  • JWZ
这里不需要使用正则表达式,只需要两个查找/替换操作

  • 将数组定义复制/粘贴到新文档
  • f查找/替换所有逗号,
  • 查找/替换所有换行符(可能是
    \r
    \r\n
    \n
    ,具体取决于所使用的平台和其他编辑器-您必须自己检查),后跟
    0f,
    ,换行符后跟
    0,
    。由于特殊字符,您必须为此使用“扩展”选项
  • 将阵列定义复制/粘贴回原始文件
  • 有些人在遇到问题时会想“我知道,我会使用正则表达式。”现在他们有两个问题

    • JWZ
    这里不需要使用正则表达式,只需要两个查找/替换操作

  • 将数组定义复制/粘贴到新文档
  • f查找/替换所有逗号,
  • 查找/替换所有换行符(可能是
    \r
    \r\n
    \n
    ,具体取决于所使用的平台和其他编辑器-您必须自己检查),后跟
    0f,
    ,换行符后跟
    0,
    。由于特殊字符,您必须为此使用“扩展”选项
  • 将阵列定义复制/粘贴回原始文件

  • 我会分两步来做:

    步骤1

    搜索
    ,*1,

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

    步骤2

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


    更换
    $1f

    我将分两步进行:

    步骤1

    搜索
    ,*1,

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

    步骤2

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


    替换
    $1f

    我还用一小块代码修复了这个问题:

    #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";
        }
    }
    
    #包括
    #包括
    #包括
    void main()
    {
    std::ifstream infle(“in.txt”);
    标准::流出管(“out.txt”);
    字符行[401];
    字符缓冲区[401];
    int bufCounter=0;
    而(!infle.eof())
    {
    填充getline(第400行);
    尺寸长度=标准长度(直线);
    对于(大小i=0;ioutFile我还用一小块代码修复了这个问题:

    #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";
        }
    }
    
    #包括
    #包括
    #包括
    void main()
    {
    std::ifstream infle(“in.txt”);
    标准::流出管(“out.txt”);
    字符行[401];
    字符缓冲区[401];
    int bufCounter=0;
    而(!infle.eof())
    {
    填充getline(第400行);
    尺寸长度=标准长度(直线);
    对于(大小i=0;i文件是的。你是对的。我只是用,,,,,,,,,,,,,然后用“f”,然后一切都正常了!完美!你最终还是会用
    1f,
    而不是
    1.0f,
    。但是如果你试图用
    1.0f,
    替换所有
    1f,
    ,你会错误地将
    0.952941f,
    替换为
    0.952941.0f,
    >是的,你说得对。我刚刚用“,”替换了“f”,然后用“f”替换了“,”,然后用“f”替换了“f”,那么一切都正常了!太好了!:你最终还是会得到
    1f,
    而不是
    1.0f,
    。但是如果你试图用
    1.0f,
    替换所有
    1f,
    ,您将错误地将
    0.952941f,
    替换为
    0.952941.0f,
    。这就是正则表达式的帮助。是的!现在,我遇到了这个问题!我将遵循此方案。