2009-10-28 456 views
0

好吧,我有如下一個WSF文件中的VBScript的字符串:翻譯VBScript中的字符串到C#字符串

Dim strTransData = "1,1,2,123457,1,20051012093000" & vbCrLf & _ 
        "2,1" & vbCrLf & _ 
        "2,2" & vbCrLf & _ 
        "2,3" & vbCrLf & _ 
        "3,""5449000000996"",0,3,39" & vbCrLf & _ 
        "3,"""",100,1,500" & vbCrLf & _ 
        "4,0,200,""""" 

我需要做的就是這個字符串轉換成C#字符串,我的理解是一個VBScript &翻譯成+在c#字符串concatenation但vbCrLf_翻譯爲?

回答

0

vbCrLf是線端的同義詞(Environment.NewLine)。

_(下劃線)允許在VB中多行語句。

另外,雙引號""是VB轉義引號的方式。

2

C#使用:

  • 「+」 進行連結
  • ( 「_」 在VB.NET)沒有續行字符
  • \」的文字引號(而不是 「」像VB.NET)
  • \ r \ n作爲一個CR和LF(從字面上看,在字符串中)
  • 或者,你可以使用Environment.NewLine

所以:

string strTransData = "1,1,2,123457,1,20051012093000" + "\r\n" + 
    "2,1" + "\r\n" + 
    "2,2" + "\r\n" + 
    "2,3" + "\r\n" + 
    "3,\"5449000000996\",0,3,39" + "\r\n" + 
    "3,\"\",100,1,500" + "\r\n" + 
    "4,0,200,\"\""; 
+1

實際上,使用無字符串進行翻譯可能比較容易(在帶有「@」字符的文字的前面引號前面),您應該避免使用\ n和\ r或者使用環境.Newline – 2009-10-28 16:06:58

+0

爲什麼我不能鍵入「未轉義」今天?我有我自己的答案:( – 2009-10-28 16:30:37

3

或者,你可以使用一個逐字字符串,在這種情況下,你的報價編碼將保持不變,你的新行是實際的新行:

string transData = @"1,1,2,123457,1,20051012093000 
2,1 
2,2 
2,3 
3,""5449000000996"",0,3,39 
3,"""",100,1,500 
4,0,200,"""""; 
+3

+ 1相同的錯字,但要小心讓多餘的空白滑這樣 – 2009-10-28 16:09:38

+0

+1您的評論:) – 2009-10-28 16:10:04

2
string TransData = new StringBuilder("1,1,2,123457,1,20051012093000",100).AppendLine("") 
     .AppendLine("2,1") 
     .AppendLine("2,2") 
     .AppendLine("2,3") 
     .AppendLine(@"3,""5449000000996"",0,3,39") 
     .AppendLine(@"3,"""",100,1,500") 
     .Append(@"4,0,200,""""") 
     .ToString(); 

這將避免任何字符串連接(在.Net中可能會很慢),並預先分配一個可容納整個結果字符串的緩衝區。請注意,使用未轉義的字符串可以更輕鬆地轉換轉義引號。

+0

如果字符串連接足夠快,在原始VBScript中,它可能是在.Net!我想VBScript可能是一個原型。 – MarkJ 2009-10-28 16:44:07

+0

我並不是說concipaation會是一個瓶頸,但爲什麼要讓它比需要的慢呢? – 2009-10-28 17:44:56

+0

在這個例子中使用StringBuilder比richardtallent的解決方案慢,因爲他將在編譯時加入到一個字符串中。但是,使用Environment.NewLine會比較慢,因爲它需要在運行時解決。即便如此,我可能會推薦String.Concat通過StringBuilder進行該場景。 – 2009-10-28 20:10:30