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"

如您所见,它是逗号分隔的。

我使用流式阅读器阅读它:

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\""

所有这些反斜杠来自哪里?我是不是读错了文件。我怎样才能防止这种情况?因为它破坏了我对数据的进一步处理。

4

3 回答 3

6

调试器只显示值,就像它出现在代码中的文字中一样(请注意,它也被引号包围)。您可以单击小放大镜打开一个纯文本视图,该视图不会在此处放置反斜杠。

如果您对此表示怀疑,您可以将您阅读的文本写入控制台以进行验证。

于 2012-05-23T10:27:02.803 回答
2

它们只是调试视图的产物。该字符串实际上只包含一个",但调试视图将其显示为\"。将字符串写入控制台,或显示一个消息框,您会发现它们\实际上并不存在。

这使您可以查看是否"只是"包含在字符串中,还是"终止字符串。它与 C# 中用于字符串文字的语法相同。

无论什么破坏了您对数据的进一步处理,都不是"您在调试视图中看到的转义。

于 2012-05-23T10:27:48.200 回答
1

您也阅读报价。组合反斜杠 + 引号仅在调试器中显示(c# 字符串...),否则它只是一个引号。

如果您不需要它们,请修剪列值。

编辑:我可以在评论中看到您正在使用名称的第一列的值创建文件夹。文件夹名称不能包含"

于 2012-05-23T10:28:15.223 回答