Regex 在记事本中更换++;使用正则表达式
我有一个cpp文件,其中包含一个全局数组定义,但不幸的是,编写定义的人没有将文本用于浮点值(1.0f instad of 1.0),所以我决定使用notepad++。数组定义如下(非常大,大约10000行代码): 有人能帮我用记事本++将0,0.984314,1,1.0f替换为0,0.984314f,1.0f,1.0f吗 有些人在遇到问题时会想“我知道,我会使用正则表达式。”现在他们有两个问题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查找
- 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;i outFile我还用一小块代码修复了这个问题:
#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,
。这就是正则表达式的帮助。是的!现在,我遇到了这个问题!我将遵循此方案。