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

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 に答える