如何从字符串中迭代每个字符并在特定字符 VB.net 中添加 vbcrlf [已关闭]

How to iterate each character from a string and add a vbcrlf in certain character VB.net [closed]

提问人:Laila Firdaus Zakiyah 提问时间:10/24/2023 最后编辑:Laila Firdaus Zakiyah 更新时间:10/25/2023 访问量:62

问:


想改进这个问题吗?通过编辑这篇文章添加详细信息并澄清问题。

26天前关闭。

所以,我有一个文本文件。目的是使用 VB.net 在字符串的某些部分添加 VBLF(换行符)。下面是字符串的示例:

之前(字符串没有任何换行符):

{1:F01ABCDIDJAXXXX0001212544}{2:O9001038231020QWERIDJRAXXX00011102422310201038N}{3:{113:0070}}{4::20:94493831555385/900:21:0799102034308001:25:520008000990:32A:231020USD0,:72:/ESETDATE/2310201038+0000/OID/231020ABCDDJAXXXX0001019040/AMNT/10000000000001,12-}

后:

如果我们在记事本上看到 ++ 将看起来像这里打开的图像

我认为我们需要遍历每个字符。 以下是我的逻辑:

1.寻找角色

{4:

,然后替换为 {4: + vbLf

  1. 替换正则表达式

对于每个带有图案的字符

^:[\d\w]+:

(喜欢 :20: ) 然后替换为 vbLf + originalcharacter

  1. 替换正则表达式

对于每个带有图案的字符

/(.*?)/

(如 \AMNT\ )

然后替换为 vbLf + originalcharacter

如果有人可以帮助解决这个问题,请不胜感激。谢谢

字符串 vb.net foreach 换行符 读写编程

评论

0赞 Andrew Mortimer 10/24/2023
分解你的问题并像那样处理它。您知道如何添加 LF 角色吗?编写该代码。你知道什么时候要分线吗?编写该代码。您需要出示您尝试过的代码,以便我们为您提供帮助。
0赞 jmcilhinney 10/24/2023
即使你没有编写代码的经验,你仍然和任何人一样有能力应用逻辑,所以你应该能够描述从实际输入到所需输出所需的特定逻辑步骤。在你知道代码必须做什么之前,你不可能知道你不能写它,所以你现在向我们寻求帮助还为时过早。对于所有编程问题,将其分解为基本步骤,将这些步骤形式化为算法,然后尽最大努力为自己实现尽可能多的步骤。向我们询问您不能执行的特定步骤。
0赞 Laila Firdaus Zakiyah 10/24/2023
@jmcilhinney,我对编写语法感到困惑,但仍然尝试编写任何代码。
0赞 Laila Firdaus Zakiyah 10/24/2023
我的逻辑是: 1.在整个字符串中找到字符“{4:”,然后替换为“{4:”+vbLf 2.将正则表达式 对于每个字符替换为模式 ^:[\d\w]+: (like :20: ) 然后替换为 vbLf+originalcharacter 3.将正则表达式 对于每个字符,用模式 \\\w\\ 替换(如 \AMNT\ ),然后用 vbLf+originalcharacter 替换
0赞 jmcilhinney 10/24/2023
没有人需要阅读评论来理解这个问题。编辑您的问题并提供所有相关信息。这包括您尝试实现的详细逻辑以及实现它的最佳尝试。

答:

0赞 Nick Abbot 10/25/2023 #1

以下是不使用正则表达式的一种可能解决方案:

Sub test()

    Dim YourString As String = "{1:F01ABCDIDJAXXXX0001212544}{2:O9001038231020QWERIDJRAXXX00011102422310201038N}{3:{113:0070}}{4::20:94493831555385/900:21:0799102034308001:25:520008000990:32A:231020USD0,:72:/ESETDATE/2310201038+0000/OID/231020ABCDDJAXXXX0001019040/AMNT/10000000000001,12-}"
    Debug.Print(DoIt(YourString))

End Sub

Function DoIt(sLine As String) As String

    Dim aTemp1() As String
    Dim aTemp2() As String
    Dim aTemp3() As String

    Dim sResult As String
    Dim i As Integer

    Try

        aTemp1 = sLine.Split("{4:")
        aTemp2 = aTemp1(1).Split(":", StringSplitOptions.RemoveEmptyEntries)
        aTemp3 = aTemp2.Last.Split("/", StringSplitOptions.RemoveEmptyEntries)

        '"{1:F01ABCDIDJAXXXX0001212544}{2:O9001038231020QWERIDJRAXXX00011102422310201038N}{3:{113:0070}}{4:" & vbLf
        sResult = aTemp1(0) & "{4:" & vbLf

        '":20:94493831555385/900" & vbLf & ":21:0799102034308001" & vbLf & ":25:520008000990" & vbLf & ":32A:231020USD0," & vbLf
        For i = 0 To aTemp2.Length - 3 Step 2
            sResult &= ":" & aTemp2(i) & ":"
            sResult &= aTemp2(i + 1) & vbLf
        Next

        '":72:"
        sResult &= ":" & aTemp2(i) & ":"

        '/ESETDATE/2310201038+0000" & vbLf & "/OID/231020ABCDDJAXXXX0001019040" & vbLf & "/AMNT/10000000000001,12-}" & vbLf
        For i = 0 To aTemp3.Length - 1 Step 2
            sResult &= "/" & aTemp3(i) & "/" & aTemp3(i + 1) & vbLf
        Next

        'vbLf & "-}"
        sResult = sResult.Replace("-", vbLf & "-") ' <-- You forgot this part

        Return sResult

    Catch ex As Exception
        Return String.Empty
    End Try

End Function

评论

0赞 Laila Firdaus Zakiyah 10/26/2023
非常感谢方丈@nick帮助,这可以作为我的额外参考。我尝试过使用正则表达式,幸运的是它有效。