这段代码怎么写shorter/clearer?
How can this code be written shorter/clearer?
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格式(书本上流行)。在这里你可以看到有问题的部分:
此示例集中的所有代码都是必需的。只有相应的值发生变化。
我什至认为你的第二个代码不起作用。好像更像这样。
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 堆栈交换。
鉴于您的数据始终不变,并且您要查找的内容始终以“*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”之后的下一个星号。你可以看到你的代码和我给出的代码之间的区别。
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格式(书本上流行)。在这里你可以看到有问题的部分:
此示例集中的所有代码都是必需的。只有相应的值发生变化。
我什至认为你的第二个代码不起作用。好像更像这样。
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 堆栈交换。
鉴于您的数据始终不变,并且您要查找的内容始终以“*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”之后的下一个星号。你可以看到你的代码和我给出的代码之间的区别。