0
newRow("OrderReference") = line.Substring(line.IndexOf("*1003") + 5, line.IndexOf("*", line.IndexOf("*1003") + 5) - line.IndexOf("*1003") - 5)

你有它。很长很丑。我在想这个:

Dim indexPlus = line.IndexOf("*1003") + 5
Dim indexMinus = line.IndexOf("*1003") - 5
newRow("OrderReference") = line.Substring(indexPlus, line.IndexOf("*", indexPlus) - indexMinus)

但这引入了新的无意义的变量。不满意。

也许 RegEx 是这里的救星?

不幸的是,我不能更改输入数据:-(

输入数据由 BWA 格式(书籍流行)组成。在这里你可以看到有问题的部分: 在此处输入图像描述

此示例集中的所有代码都是必需的。只有相应的值会改变。

4

2 回答 2

2

我什至不认为你的第二个代码有效。似乎更像这样。

Dim index = line.IndexOf("*1003") + 5
newRow("OrderReference") = line.Substring(index, line.IndexOf("*", indexPlus) - index)

10 - 5 - 2 与 10 - (5 - 2) 不同,而是与 10 - (5 + 2) 相同。

下次,请查看 codereview 堆栈交换。

于 2016-11-29T15:41:22.463 回答
1

鉴于您的数据始终不变,并且您要查找的内容始终以“* 1003”开头,因此您不需要使用正则表达式(即使您可以)。只需使用您已经在使用的内容,但需要进行一些更正。

using System;

public class Program
{
    public static void Main()
    {
        string input = "L10113540   VD44444     VD2002100234949     000116161       04201261\r\n";
        input += "  KN00010000000129000LPEUR003000001*1003A.Muller-Schulz*1017Bastei\r\n";
        input += "Lubbe.61204 Laund.Meine Schuld*1019KL*102990300*1030NO*1032EUR*1131KT";

        int start = input.IndexOf("*1003");
        int end = input.IndexOf("*", start + 1);
        string result = input.Substring(start + 5, end - start - 5);

        Console.WriteLine(result);

        // Your code
        start = input.IndexOf("*1003") + 5;
        end = input.IndexOf("*1003") - 5;
        result = input.Substring(start, input.IndexOf("*", start) - end);

        Console.WriteLine(result);

    }
}

结果

A.Muller-Schulz
A.Muller-Schulz*1017Baste

您可以看到您在问题中发布的内容并没有给出您想要的结果。您真正要寻找的只是第一个“* 1003”之后的下一个星号。您可以看到您的代码与我给出的代码之间的区别。

.NET 小提琴示例

于 2016-11-29T16:05:31.220 回答