2009-10-23 15 views
2

我有一個字符串,它看起來像這樣最好使用MID和INSTR的

「患者姓名,醫生姓名,患者ID,別的東西」

我想提取每一個都放在一個變量中。這樣var1將等於「患者姓名」var2將等於「文件名」等。使用instr和mid。什麼是最好的辦法呢?

+0

這是VB.NET還是VBA? – Buggabill 2009-10-23 17:45:46

+1

「在vb.net中最好使用Mid和Instr」是NONE。不要使用它們。 EVER。改用.Substring(),.IndexOf()和他們的親屬。 – 2009-10-23 17:53:06

+0

事情是我不認爲我會切換,因爲我很習慣中期和instr,他們很容易使用! – 2009-10-25 02:17:28

回答

7

它使用的是拆分功能做的最好辦法 - 這裏的一些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

對於兩個答案中的+1 :-) – Buggabill 2009-10-23 17:47:47

2

您應該考慮使用屬於.NET框架而不是傳統VB函數的字符串方法。

String.Split()將讓你的方式99%到你想要的東西。

+0

酷我怎麼用? – 2009-10-23 17:43:41

1

的唯一原因,以避免Microsoft.VisualBasic.Strings模塊(例如,InStr和Mid)中的衆所周知的方法可能是如果您習慣了來自C#背景的System.String中的方法,或者希望使您的解決方案具有高可移植性(這樣您就可以在Mono上運行它)。

使用這些方法可以用於C#程序員混亂(因爲第一個字符的索引是1,而不是0),但他們確實有一個很大的優勢:他們obbey選項比較設置!您可能會注意到,如果您使用默認選項比較二進制,某些方法甚至比來自System.String類的對應方法更快。這是因爲在這種情況下,他們執行二進制比較,而其他方法將不得不執行文化敏感的比較。

最後但並非最不重要的,所有這些方法都不會,如果你沒有通過(空)給他們拋出異常,因爲在VB.NET沒有爲空字符串的等價物。微軟現在意圖在.NET平臺的未來版本中放棄這些功能(儘管沒有人能確定任何存在於其他版本的東西)。

拿在merrits和雙方的「內在」字符串VB.NET的功能和那些System.String類提供的福利很好看。對於具有Visual Basic背景的VB.NET程序員來說,使用這些「固有」功能可能是解決您的問題的一種自然方式,並且通常您不必擔心它們的性能。