2011-03-04 14 views
3

私は最近、CSVによってデータベースにアイテムを追加するアプリケーションを作成しました。アイテムを追加した後、私の価値の多くに余分な引用符( ")が付いていて、注文が乱れていたことに気付きました。ExcelからCSVにエクスポートするとExcelに余分な引用符が追加されますすでにそれらの中に引用があり、私のすべての値私は違いを以下に示しました:。ExcelはCSVエクスポートに余分な引用符を追加します

オリジナルアイテム:ドリル電気リバーシブル1/2" 6.3A

エクスポートされたアイテム:「電気リバーシブルドリルを1/2 "" 6.3 "

注:CSVエクスポートでは、3つの余分な引用符( ")が追加されています。 2つは端にあり、もう1つは元の意図された引用の後ろにある。

設定は変更できますか、Excelファイル/列に設定できる書式設定はありますか?あるいは、データベースに追加する前にバックエンドコードで引用符を削除する必要がありますか?

+0

周囲の引用はCSVの標準ですので、私はそれらについて心配しません。あなたの輸入業者が引用符を囲んでいるかどうかを確認してください。内部引用符は二重引用符をエスケープするExcelの方法です。少し迷惑な、私はあなたを与えますが、それは標準の一部です。 – chmullig

+0

* '問題は、ExcelからCSVにエクスポートするときに、Excelは既に引用符を持っている私のすべての値に余分な引用符を追加します。* - インポートしようとせずに、これが**問題**? – Wolf

答えて

7

これは完全に正常です。これは文字列であるため、外側の引用符が追加されます。内側の引用符は、それをエスケープするために倍増されます。たとえば、SQLクエリで見られるのと同じ種類のものです。 TextFieldParserクラスを使用して、これを自動的に解析するためのフレームワークコードを試してみてください。

3

これは標準です。

CSVファイル内の値には引用符を使用する必要があります(そうしないと、フィールド内のコンマや改行が誤って解釈される可能性があります)。

フィールド内で引用符をエスケープする方法は、表示しているのと同じように、ダブルクリックすることです。

私はあなたがbasic rules of CSVについて読むことをお勧め:

CSVはカンマ文字や改行で終了したレコード/行で区切られたフィールド/列を持つ区切りのデータ形式です。 特殊文字(カンマ、改行、または二重引用符)を含むフィールドは、二重引用符で囲む必要があります。行に空文字列の1つのエントリが含まれている場合は、二重引用符で囲むことができます。 フィールドの値に二重引用符が含まれている場合、そのフィールドの値の隣に別の二重引用符を置くことによってエスケープされます。 CSVファイル形式には、特定の文字エンコーディング、バイトオーダー、または行ターミネータの形式は必要ありません。

(強調鉱山)

+0

Hmm。これは、すでに引用符を含むフィールドでのみ発生します。だから、もし私が ""の後に私のコードで問題を解決する必要がありますか?または ""と交換する必要がありますか? ""編集:待って、私はExcelファイルに置き換える必要があります。 – Lando

+4

@Lando - CSV解析ライブラリを使用して、あなたの人生を楽にしてください。 – Oded

-1

別のアプローチは、ExcelデータにUnicode文字 "DOUBLE PRIME"

http://www.fileformat.info/info/unicode/char/2033/index.htm 

を使用することです。 ExcelからUTF-8またはUTF-16 .csvにエクスポートするには、適切なCharacterSetプロパティを持つschema.iniを指定する必要があります。明らかに、.csvをデータベースにインポートするために使用するツールはUnicode対応でなければなりません。

DBMSによっては、データ転送のより直接的な方法(SELECT/INSERT ... INTO ... IN)を使用できるため、.csvが完全に削除されます。

+0

投票の理由を聞かれますか? –

0

ExcelからTAB区切りファイルとしてエクスポートすることができます。私はそれを解析するのが簡単だとわかります。

0

すべての文字を置き換えます。右の二重引用符を文字でマークします。左の二重引用符。彼らは同様に見える、Excelは混乱し、テキストを変更しないでください。

0

このソリューションは、最終出力がHTMLの場合にのみ役立ちます。これには、明らかにあなたは、C#またはあなたが作業しているどの言語でこれをやり直す必要がありますjavascriptのソリューションです:

base = base.replace(/""/gi, '"'); 
base = base.replace(/'/gi, '''); 

あなたはCSVを解析する前にこれを適用します。

関連する問題