2011-04-14 79 views
1

我想解析由*分隔的長文本。該文本必須像第二個例子那樣顯示。解析這個示例文本的最簡單方法是將文本排序以便於閱讀。解析文本(VB.Net)

文本樣本

*01/21/2008//David//Los Angeles//Manager* He is in *01/21/2008//David//Los Angeles//Manager* He is Out for lunch *01/21/2008//David//Los Angeles//Manager* He came back from lunch *01/21/2008//David//Los Angeles//Manager* He is out for the day

的方式具有在TextBox

*01/21/2008//David//Los Angeles//Manager* He is in 
*01/21/2008//David//Los Angeles//Manager* He is Out for lunch 
*01/21/2008//David//Los Angeles//Manager* He came back from lunch 
*01/21/2008//David//Los Angeles//Manager* He is out for the day 

回答

1

這是你的另一個版本。對不起,其實我是一個C#的傢伙,所以我希望這看起來在VB中可以接受的:

Dim re As New Regex("(\*\d+\/\d+\/\d+(?:\/\/[\w\s]+){3}\*[\w\s]+)") 
Dim original As String = "*01/21/2008//David//Los Angeles//Manager* He is in *01/21/2008//David//Los Angeles//Manager* He is Out for lunch *01/21/2008//David//Los Angeles//Manager* He came back from lunch *01/21/2008//David//Los Angeles//Manager* He is out for the day" 

Dim processed As String = re.Replace(original, "$1" + vbCrLf) 
Dim lines As String() = processed.Split(vbCrLf) 

For Each l As String In lines 
     Console.WriteLine(l) 
Next 

輸出:

*01/21/2008//David//Los Angeles//Manager* He is in 

*01/21/2008//David//Los Angeles//Manager* He is Out for lunch 

*01/21/2008//David//Los Angeles//Manager* He came back from lunch 

*01/21/2008//David//Los Angeles//Manager* He is out for the day 

然後,你可以添加processed變量文本框。

DEMO:http://www.ideone.com/ICwID

3

可以簡單地使用string.Split('*')並使用Array.Sort到所得的數組進行排序,以顯示。

或者,使用TextFieldParser類來解析文件,使用*作爲分隔符。

+0

不會在 「好」 弦上的第二個 「*」 這個版本分裂?輸出將是Ln1:2008年1月21日//大衛//洛杉磯//經理Ln2:他在Ln3:2008年1月21日//大衛//洛杉磯//經理...等等。分裂和/或正則表達式組合尋找一個「*」後跟一個數字(或日期字符串的格式)會更好,不是嗎? – wergeld 2011-04-14 19:55:07

0

試試這個:鏈接:http://ideone.com/bGLo8

using System; 
using System.Collections.Generic; 
using System.Linq; 

public class Test 
{ 
     public static void Main() 
     { 
      string str = "*01/21/2008//David//Los Angeles//Manager* He is in *01/21/2008//David//Los Angeles//Manager* He is Out for lunch *01/21/2008//David//Los Angeles//Manager* He came back from lunch *01/21/2008//David//Los Angeles//Manager* He is out for the day"; 
      int cnt = 1; 
      Action<char> PrintAction = delegate(char x) 
       { 
        if (x == '*') { cnt = (cnt + 1) % 2; if (cnt == 0) Console.WriteLine(); } 
        Console.Write(x); 
       }; 
      str.ToCharArray().ToList().ForEach(X => PrintAction(X));  
     } 
}