2013-08-01 87 views
1

我在嘗試使用'?'拆分字符串。作爲分隔符。我的代碼從CSV文件讀取數據,某些符號(如分數)不被C#識別,因此我試圖用相關數據(本例中爲債券優惠券)替換它們。我在下面的代碼打印語句(其被嵌入在具有索引變量i的循環)來測試輸出:Regex.Split和string.Split按預期工作

string[] l = lines[i][1].Split('?');    
//string[] l = Regex.Split(lines[i][1], @"\?"); 

System.Console.WriteLine("L IS " + l.Length.ToString() + " LONG"); 
for (int j = 0; j < l.Length; j++) 
    System.Console.WriteLine("L["+ j.ToString() + "] IS " + l[j]); 

if (l.Length > 1) 
{ 
    double cpn = Convert.ToDouble(lines[i][12]); 
    string couponFrac = (cpn - Math.Floor(cpn)).ToString().Remove(0,1); 
    lines[i][1] = l[0].Remove(l[0].Length-1) + couponFrac + l[1]; // Recombine, replacing '?' with CPN 
} 

的問題是,既分割方法(string.Split()Regex.Split())產生不一致的結果與一些行中的字符串元素正確分裂,其他字符串根本不分裂(因此問號仍在字符串中)。

有什麼想法?我在拆分方法上看過類似的帖子,他們沒有太大的幫助。

+1

你有一個字符串的具體例子,你期望從split()方法得到的結果嗎? –

+0

@ C.Evenhuis例如,字符串「TII 0?04/15/15」在「TII 0?01/15/22」被拆分並適當地重新組合爲「TI​​I 0.125 01/15/22」時不分割。 – Erroldactyl

+1

我懷疑你有什麼是文本編碼問題。這些問號不是真正的問號,而是因爲沒有正確加載字體而顯示不正確的字符。數據來自哪裏? –

回答

1

我沒有任何麻煩解析以下內容。

var qsv = "now?is?the?time"; 
var keywords = qsv.Split('?'); 
keywords.Dump(); 

的代碼和輸出截圖...

enter image description here

UPDATE: 雖然目前沒有出現任何問題Split。在別的地方還有一個問題,因爲在這個小規模的測試中,它工作得很好。我建議你使用LinqPad來測試這些小範圍的場景。

var qsv = "TII 0 ? 04/15/15"; 
var keywords = qsv.Split('?'); 
keywords.Dump(); 

qsv = "TII 0 ? 01/15/22"; 
keywords = qsv.Split('?'); 
keywords.Dump(); 

新更新的輸出:

enter image description here

+0

這很有幫助,但我無法想象發生了什麼事。我認爲C#在閱讀'?'時遇到困難就好像它是一些不可識別的字符,它會以'?'的形式輸出到命令行。 – Erroldactyl

+0

你是從光盤讀取文件還是從Web服務中獲取文件?如果您將QSV字符串硬編碼爲測試並且仍然失敗,那麼我會想知道這可能是什麼......如果您不知道,那麼您可能知道這可能是格式問題。 – phillip

+0

數據來自彭博社,轉換爲excel文件。問號正在取代那些小數符號之一,我認爲這不一定被看作是'?'。 – Erroldactyl

1

我使用String.Split沒有問題。你可以發佈你的輸入和輸出嗎? 如果你可以使用String.Replace替換你想要的'?'用字符串中不會出現的字符,然後使用該字符上的String.Split來分割結果字符串以獲得相同的效果。 (只是一個嘗試)

+0

我使用了方法行[i] [1] .Replace('?','^'),然後嘗試在'^'處分割它沒有替換任何問號,也沒有重載字符串替換方法的工作。 – Erroldactyl