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

これらすべてのバックスラッシュはどこから来るのですか?ファイルを間違って読んでいますか?どうすればこれを防ぐことができますか?それはデータの私のさらなる処理を台無しにするからです。

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 に答える