Mysql 更换不工作的部件
我有一个键值对中数据的文本文件,我已设法将其转换为一种格式,其中键值对之间用下划线分隔,键值与值之间用冒号分隔。我认为这种格式有助于保持数据中的空间完好无损。下面是一个用数据替换Mysql 更换不工作的部件,mysql,regex,replace,notepad++,Mysql,Regex,Replace,Notepad++,我有一个键值对中数据的文本文件,我已设法将其转换为一种格式,其中键值对之间用下划线分隔,键值与值之间用冒号分隔。我认为这种格式有助于保持数据中的空间完好无损。下面是一个用数据替换~~~~~~~~s的示例 _ID:~~~_NAME:~~~~~_DESCRIPTION:~~~~~~~_TYPE1:~~~~~~_TYPE2:~~~~~~ ...etc 我想将其转换为MySQL脚本,以便将数据插入表中。我的问题是,并非每个记录中都包含可为空的字段。e、 g.记录有\u类型1:,可能有也可能没有\u类型
~~~~~~~~
s的示例
_ID:~~~_NAME:~~~~~_DESCRIPTION:~~~~~~~_TYPE1:~~~~~~_TYPE2:~~~~~~ ...etc
我想将其转换为MySQL脚本,以便将数据插入表中。我的问题是,并非每个记录中都包含可为空的字段。e、 g.记录有\u类型1:
,可能有也可能没有\u类型2:
... _DESCRIPTION:~~~~~~_TYPE1:~~~~~~_TYPE2:~~~~~~_ADDRESS:~~~~~~~ ...
... _DESCRIPTION:~~~~~~_TYPE1:~~~~~~_ADDRESS:~~~~~~~ ...
... _DESCRIPTION:~~~~~~_TYPE1:~~~~~~_ADDRESS:~~~~~~~ ...
... _DESCRIPTION:~~~~~~_TYPE1:~~~~~~_TYPE2:~~~~~~_ADDRESS:~~~~~~~ ...
... _DESCRIPTION:~~~~~~_TYPE1:~~~~~~_ADDRESS:~~~~~~~ ...
我想通过在没有\u TYPE2:
的情况下,在每个\u TYPE1
之后插入\u TYPE2:
来解决这个问题。由于可能的类型只有少数几种,因此我设法在每个\u类型1:~~~~~~~~~~~
之后选择\u,但后面没有类型2:
。我使用了以下正则表达式,egtype
是一种可能的类型:
(?<=_TYPE1:egtype)_(?!TYPE2:)
(?尝试搜索(\u TYPE1:)(\S\S\S\S\S)(\u地址:)
并替换为\1\2\u类型2:~~~~~~\3
我用记事本++测试了你的数据,效果很好
不要忘记将搜索模式更改为正则表达式。
要将其转换为插入脚本,只需像上面一样继续使用正则表达式,并用括号括起所需的任何字段,然后用\number替换任何字段并移动它们,这应该是非常简单的手工劳动,祝您玩得开心。
例如,在这里搜索您的整行,我只做描述、类型1和类型2
搜索是否使用正则表达式
(\u DESCRIPTION)(:)(\S\S\S\S\S)(\u TYPE1)(:)(\S\S\S\S\S)(\u TYPE2)(:)(\S\S\S\S)
然后替换为类似
插入表1\(desc,type1,type2\)值\('\3','\6','\9'\);
(在记事本++)尝试搜索(\u type1:)(\S\S\S\S)(\u地址:)
并替换为\1\2\u类型2:~~~~~~\3
我用记事本++测试了你的数据,效果很好
不要忘记将搜索模式更改为正则表达式。
要将其转换为插入脚本,只需像上面一样继续使用正则表达式,并用括号括起所需的任何字段,然后用\number替换任何字段并移动它们,这应该是非常简单的手工劳动,祝您玩得开心。
例如,在这里搜索您的整行,我只做描述、类型1和类型2
搜索是否使用正则表达式
(\u DESCRIPTION)(:)(\S\S\S\S\S)(\u TYPE1)(:)(\S\S\S\S\S)(\u TYPE2)(:)(\S\S\S\S)
然后替换为类似
插入表1\(desc,type1,type2\)值('\3','\6','\9'\);
(在记事本++)如果这是一次性问题,则分两步进行。第一步将在每行添加\u type2:SomeDefaultValue
。第二步将从不需要的行中删除它
步骤1:查找内容:$
,替换为:\u TYPE2:xxx
步骤2:查找内容:(\u TYPE2:.*)\u TYPE2:xxx$
,替换为:\1
在这两个步骤中,选择“正则表达式”并取消选择“点匹配换行符”。同时将xxx
更改为您的默认值。如果这是一次性问题,则分两步进行。第一步将在每行添加\u TYPE2:SomeDefaultValue
。第二步将从不需要的行中删除它
步骤1:查找内容:$
,替换为:\u TYPE2:xxx
步骤2:查找内容:(\u TYPE2:.*)\u TYPE2:xxx$
,替换为:\1
在这两个步骤中,选择“正则表达式”并取消选择“点匹配换行符”。同时将xxx
更改为默认值。Regex
要执行所需操作,请尝试以下操作:
查找:
替换:
_TYPE2:
您可以使用示例数据对其进行测试,并对其进行解释
Python脚本插件
顺便说一句,我认为不可能使用一个且仅使用一个正则表达式将数据转换为SQL insert语句,虽然我知道您试图通过添加伪TYPE2来做什么,但我认为这不是最好的选择
所以,我的建议是使用Notepad++的Python脚本插件
从插件管理器或从安装Python脚本插件
然后转到插件>Python脚本>新脚本。为新文件选择一个文件名(例如sql_insert.py)并复制下面的代码
运行Plugins>pythonscript>Scripts>sql_insert.py,一个新的选项卡将显示所需的结果
脚本:
columns=[]]
值=[]]
当前_线=0
def插入(行,匹配):
全球海流线
如果行>当前行:
当前_线+=1
columns.append([])
values.append([])
如果匹配:
i=0
对于match.groups()中的m:
如果i%2==0:
列[行]。追加(m)
其他:
值[line]。追加(m)
i+=1
pysearch(“[A-Z0-9]+):([^\n]+)”,插入)
notepad.new()
对于范围内的行(列):
editor.addText(“插入到表中(“+”,”.join(列[line])+”))值(“+”,“.join(值[line])+”);\n”)
注意:我仍在学习Python,我觉得这篇文章可以写得更好。如果你能提出改进建议,请随意编辑我的答案或发表评论
输入示例:
示例输出:
正则表达式
要执行所需操作,请尝试以下操作:
查找:
替换:
_TYPE2:
您可以使用示例数据对其进行测试,并对其进行解释
Python脚本插件
顺便说一句,我认为不可能使用一个且仅使用一个正则表达式将数据转换为SQL insert语句,虽然我知道您试图通过添加伪TYPE2来做什么,但我认为这不是最好的选择
所以,我的建议是使用Notepad++的Python脚本插件
安装Python脚本插件,从插件管理器或
_ID:~~~_NAME:~~~~~_DESCRIPTION:~~~~~~~_TYPE1:~~~~~~_TYPE2:~~~~~~
_ID:~~~_NAME:~~~~~_DESCRIPTION:~~~~~~_TYPE1:~~~~~~_TYPE2:~~~~~~_ADDRESS:~~~~~~~
_ID:~~~_NAME:~~~~~_DESCRIPTION:~~~~~~_TYPE1:~~~~~~_ADDRESS:~~~~~~~
INSERT INTO table (ID,NAME,DESCRIPTION,TYPE1,TYPE2) values (~~~,~~~~~,~~~~~~~,~~~~~~,~~~~~~);
INSERT INTO table (ID,NAME,DESCRIPTION,TYPE1,TYPE2,ADDRESS) values (~~~,~~~~~,~~~~~~,~~~~~~,~~~~~~,~~~~~~~);
INSERT INTO table (ID,NAME,DESCRIPTION,TYPE1,ADDRESS) values (~~~,~~~~~,~~~~~~,~~~~~~,~~~~~~~);