使用 Excel 表中两列的值在文本文件中查找和替换字符串,分别为 FIND 和 REPLACE 字符串

使用 Excel 表中两列的值在文本文件中查找和替换字符串,分别为 FIND 和 REPLACE 字符串

我有许多大型“配置”文本文件,其中包含旧网络上的 IP 地址 [路由器配置。交换机配置。防火墙配置等。]

配置文件可能看起来像这样,其中的乱码是一些其他重要但不相关的字符串。

“asdhlksdjfkdlsh sldkhdlfh旧 IP 地址 1sdalkjhdslkfhkhdasf sadkhjksdafh sdafkhkjdhfsakjhkdjfsa sadfk

adsfkjhkjdsf adfhjhjakds旧 IP 地址 400哈哈哈哈

adskjhkhkhkjh旧 IP 地址 10

配置中的 IP 地址txt 文件没有任何特定顺序。

我还有一个包含很多数据列的 Excel 表。C 列 = 旧 IP 地址列表(例如第 1 行:172.10.10.44,第 2 行:...等等,直到第 500 行)E 列 = 新 IP 地址列表(例如第 1 行:10.10.10.58,第 2 行:....,等等,直到第 500 行)

我想用适当的“新” IP 地址替换文本文件中的所有“旧” IP 地址。文本文件的其余部分必须保持原样。只有旧 IP 地址需要用新 IP 地址替换。

怎么做?我想象会有一些迭代过程,其中 find 函数必须从 C 列 excel 中获取旧 ip 地址并在记事本/txt 文件中搜索它,然后将其替换为与 excel 中旧 ip 地址位于同一行但来自 E 列的新 ip 地址。然后重复此操作,逐行遍历 excel 表,直到所有行都用尽。

记事本++?Python?VBA?等等?

答案1

如果你有数百个 IP 地址:

对 C 列中的“旧” IP 地址进行排序,确保 E 列也随之排序

使用与对 C 列进行排序时选择的相同排序标准对“旧” IP 地址的文本文件列表进行排序

在排序列 C 旁边创建新的空白列

将文本文件中已排序的数据(旧 IP 地址)粘贴到与已排序列 C 相邻的新空白列中

检查新列和排序列 C 中的数据以确保数据匹配

如果您想要一个包含新 IP 地址的新文本文件,请将 E 列中的数据复制到新文本文件中

答案2

我使用了一个包含您的三个示例的文本文件和第二个文件 XLSX,其中 C 列中的三个“旧 IP 地址”的顺序与上面的顺序不同。“新 IP 地址”位于 E 列,与 C 列的顺序一致。

我选择让它们按照这个顺序排列,因为你提供了相当充分的信息,而且你不太可能不按照相同的顺序排列它们,而不提及这个事实。如果是这样的话,我也不明白它怎么会起作用,所以... 也有这个!

我使用的 XLSX 文件名为“Book 3.xlxs”,显然,您需要对其进行编辑以符合您的名称。文本文件会打开并立即转换为 Excel 文件。(假设您可以成功将其作为 Excel 文件打开。然后将其保存回标准文本文件格式或您找到的 .TXT 格式。)但是,如果需要,您可以采用更复杂的方式执行此操作。由于可能性很多,我不会深入探讨这一点。

我使用的公式是:

=SUBSTITUTE(A1,  INDEX([Book3]Sheet1!$C$2:$C$4,XMATCH(1000000,SEARCH([Book3]Sheet1!$C$2:$C$4,A1,1),-1),1),  INDEX([Book3]Sheet1!$E$2:$E$4,XMATCH(1000000,SEARCH([Book3]Sheet1!$C$2:$C$4,A1,1),-1),1))

有三个基本部分:1)SUBSTITUTE完成最终工作的,2)第一个INDEX/XMATCH在源数据中查找 OLDIPADDRESS 的部分,3)INDEX/XMATCH为每一行的源数据查找新的部分。

在每种情况下,都是INDEX/XMATCH标准INDEX/MATCH样式构造。重要的是SEARCH其中的部分。SEARCH用于针对所有旧 IP 地址测试任何给定行的文本数据。其中一个将给出一个数字,其余的将给出一个错误。XMATCH(不是MATCH因为它不能这样做)用于寻找数字 1,000,000,该数字将大于任何值SEARCH可以产生的数字,因为 Excel 单元格可以包含的字符数是有限的。匹配类型为“精确,或下一个更小”,因此它会找到唯一的数字结果。该结果是被检查行的数据单元格中的旧 IP 地址匹配的 C 列数据的行。

然后另一个也INDEX/XMATCH做同样的事情来找到新 IP 地址对应的行。

这两个部分彼此独立运行,如果使用其中一个部分来支持另一个部分,这通常不是一个好主意,但在这种情况下,唯一的缺点是,可能需要对另一个子句进行编辑(例如,为了升级它)。例如,范围必须保持同步。

最后,SUBSTITUTE开始用新地址替换旧地址。

此时,您将拥有一个新列,其中所有旧地址都已被新地址替换。

如上所述,您似乎提供了一套完整的信息,所以我没有提供任何“如果错误,请执行此操作”的方式……如果没有更多信息,我真的无法做到这一点。由于没有理由地址不能在文本文件中多次出现,因此其行数远大于 XLSX 文件中的行数既不是不可能也不是不合理的。但是,如果存在或可能存在与新 IP 信息不匹配的 TXT 文件数据,您需要提供一条由于不匹配而导致错误的路径,以将这些行中的原始数据传送到新列。

最后,您将复制新列并将其作为值 ( Paste|Special|Values) 粘贴到原始列的上方。为避免 TXT 文件的困难(复杂性),请在 XLSX 文件中创建替换列。如果需要,只需在之后关闭它而不保存即可。

相关内容