【问题标题】:Mapping logic for converting a pattern in excel or database用于在 excel 或数据库中转换模式的映射逻辑
【发布时间】:2019-02-27 22:44:06
【问题描述】:

我有数以千计的映射模式需要转换。附件是显示我需要转换为目标值的源值的图像。

我能破译的一些规则如下:-

  1. 如果破折号 ('-') 位于任何值之前,则它需要转换为管道 ('|')
  2. 如果中间有多个破折号,例如4 个破折号,然后它们将转换为 4 个管道和 3 个破折号,如第二个示例所示,以显示 3 个空字段 (|-|-|-|)
  3. 如果末尾有多个破折号,例如3 个破折号,然后它们将被转换为 3 个管道和 3 个破折号,如第一个示例所示,以便在末尾显示 3 个没有管道的空字段 (|-|-|-)
  4. 开头永远不会有破折号
  5. 总共有 8 个值。每个 |-|被认为是一个空值。每个字段由管道分隔。

我正在寻找使用任何可能的软件将源值转换为预期目标值的方法。

【问题讨论】:

  • 什么确切地是问题 - 你不知道任何编程?如果不是,那么这里就不是一个提供教程的地方,如果是,那么为什么不尝试一下,看看效果如何?

标签: regex excel database pattern-matching data-conversion


【解决方案1】:

这个快速的用户定义函数似乎无需正则表达式即可满足您的要求。

Function mapSource(str As String)

    Dim tmp As Variant, i As Long

    'strip leading hyphens
    Do While Left(str, 1) = Chr(45) And Len(str) > 0: str = Right(str, Len(str) - 1): Loop

    'split str to a maximum of 8 array elements
    tmp = Split(str, Chr(45), 8)

    'preserve an array of 8 elements
    ReDim Preserve tmp(7)

    'replace empty array elements with hyphens
    For i = LBound(tmp) To UBound(tmp)
        If tmp(i) = vbNullString Then tmp(i) = Chr(45)
    Next i

    'rejoin array into str
    str = Join(tmp, Chr(124))

    'output mapped str
    mapSource = str

End Function

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-08
    • 1970-01-01
    • 1970-01-01
    • 2018-03-16
    • 1970-01-01
    • 2023-03-10
    相关资源
    最近更新 更多