我有一个看起来像这样的字符串
“患者姓名,医生姓名,患者ID,其他内容”
我想提取其中的每一个并将其放入变量中。这样var1将等于“患者姓名”var2将等于“Doc name”等...使用instr和mid。最好的方法是什么?
答案 0 :(得分:7)
最好的方法是使用Split函数 - 这里有一些vba代码:
Dim txt as String = "Patient Name, Doc Name, Patient ID, something else"
Dim x as Variant
Dim i as Long
x = Split(txt, ",")
For i = 0 To UBound(x)
Debug.Print x(i)
Next i
在VB.Net中:
Dim txt as String = "Patient Name, Doc Name, Patient ID, something else"
Dim split As String() = txt.Split(",")
For Each s As String In split
If s.Trim() <> "" Then
Console.WriteLine(s)
End If
Next s
答案 1 :(得分:2)
您应该考虑使用属于.NET框架而不是旧版VB函数的字符串方法。
String.Split()
将为您提供99%的目标。
答案 2 :(得分:1)
从Microsoft.VisualBasic.Strings模块(例如,InStr和Mid)中避免众所周知的方法的唯一原因可能是,如果您习惯于来自C#背景的System.String中的方法,或者您希望使您的解决方案具有高度可移植性(因此您也可以在Mono上运行它)。
使用这些方法可能会让C#程序员感到困惑(因为第一个字符的索引是1,而不是0),但它们确实有一个很大的优势:它们遵循Option Compare设置!您可能会注意到,如果使用默认的Option Compare Binary,某些方法甚至比System.String类中的对应方法更快。这是因为在这种情况下,他们执行二进制比较,而其他方法必须执行文化敏感比较。
最后但并非最不重要的是,如果将Nothing(null)传递给它们,所有这些方法都不会抛出异常,因为在VB.NET中,Nothing等同于空字符串。微软现在打算在.NET平台的未来版本中放弃这些功能(尽管没有人能够确定在另一个版本中存活的东西)。
仔细研究VB.NET的“固有”字符串函数和System.String类提供的函数和优点。对于具有Visual Basic背景的VB.NET程序员,使用这些“固有”功能可能是解决问题的一种自然方式,通常您不必担心它们的性能。