2012-05-23 24 views
1

我有一個奇怪的問題。串流讀取器中的反斜槓

我嘗試讀取數據遷移的csv文件。這是文件的外觀(它的UTF8格式)

"MIGRATIONID","ACCOUNTID","MIGRACCOUNTID","CONFIGID","MEDIUMID","PRIMCLASSID","SECCLASSID","SALESCODE","CONTENT","REGELNR","LIST_ATTRIBUTES","PACKAGE_TYPE","VERWIJSADVERTENTIE","NIET_PUBLICEREN" 
"ITM-0015-0163","62222532","ACT-0000-4755","61635591","TGP","TG_P_GV_01","","TG_Print_GV","%NAME%|%STREETNAME%|%HOUSENUMBER%|%HOUSENUMBEREXT%||%POSTALCODE%|%LOCALITY%|%AREACODE%|%CONNECTIONNUMBER%|%URL%|%EMAIL%||%COMMERCIAL%||||||%PRODNR%","10","","","","FALSE" 
"ITM-0015-0172","62222140","ACT-0000-4779","61636356","TGP","TG_P_GV_01","","TG_Print_GV","%NAME%|%STREETNAME%|%HOUSENUMBER%|%HOUSENUMBEREXT%||%POSTALCODE%|%LOCALITY%|%AREACODE%|%CONNECTIONNUMBER%|%URL%|%EMAIL%||%COMMERCIAL%||||||%PRODNR%","10","","","","FALSE" 

正如你所看到的,它是用逗號分隔的。

我讀使用一個StreamReader它:

System.IO.StreamReader file = new System.IO.StreamReader(documentFilePath, Encoding.UTF8); 
while ((line = file.ReadLine()) != null) 
{ 
    //perform the transformation 
} 

我有這個做了萬次沒有問題。但是,當行被讀取時,它們突然變成這樣(從調試手錶複製):

"\"ITM-0015-0163\",\"62222532\",\"ACT-0000-4755\",\"61635591\",\"TGP\",\"TG_P_GV_01\",\"\",\"TG_Print_GV\",\"%NAME%|%STREETNAME%|%HOUSENUMBER%|%HOUSENUMBEREXT%||%POSTALCODE%|%LOCALITY%|%AREACODE%|%CONNECTIONNUMBER%|%URL%|%EMAIL%||%COMMERCIAL%||||||%PRODNR%\",\"10\",\"\",\"\",\"\",\"FALSE\"" 

所有這些反斜槓從哪裏來?我是否讀錯了文件。我怎樣才能防止這個?因爲它破壞了我對數據的進一步處理。

回答

6

調試器只顯示它在代碼中的文字中出現的值(注意它也用引號括起來)。你可以點擊小放大鏡打開一個純文本視圖,它不會在那裏放置反斜槓。

如果您懷疑這一點,您可以將您讀取的文本寫入控制檯進行驗證。

+0

先生,您是對的!問題原來不是反斜槓,而是雙引號!非常感謝您的提示。 –

2

它們只是調試視圖的工件。該字符串實際上只包含",但調試視圖將其顯示爲\"。將字符串寫入控制檯,或者顯示一個消息框,你會發現那些\實際上並不存在。

這允許您查看"只是包含在字符串中的"或終止字符串的"。這與C#中用於字符串文字的語法相同。

無論你怎樣破壞你對數據的進一步處理,它都不是你在調試視圖中看到的"的轉義。

+0

實際上,我正在使用第一個colum來構建diretory路徑,並且反斜槓在路徑創建中導致異常。這就是爲什麼我發現這個問題。因此它不限於調試器。 –

+0

@real_yggdrasil然後你的示例字符串是錯誤的,或者你誤診了這個問題。你的示例字符串不包含任何'\'es。 – CodesInChaos

1

你也讀引號。組合反斜槓+報價僅在調試器(C#字符串...)中顯示,否則它只是一個報價。

如果您不需要它們,請修剪列值。

編輯:我可以在評論中看到您正在使用名稱的第一列的值創建文件夾。文件夾名稱不能包含"