2009-09-03 6 views
0

私はCSVファイルをソースコードとして扱いたいと思っています。基本的には、私はcsv行をとり、すべての文字列パラメータを持つ関数を呼び出したかのように使用します。CSVのすべての要素を二重引用符で囲むツールはありますか?

テキストにカンマがある場合、個々の要素は二重引用符で囲まれています。

csv行のすべての要素を二重引用符で簡単に追加する方法はありますか。

元のドキュメントはExcelファイルであるため、Excelのすべての機能は問題ありませんが、他の簡単なツールも歓迎します。

+0

ソースコードはどの言語ですか?あなたがコードを生成しているように思えますが、コードがCSVを読み込むのが簡単かもしれません。あなたが使用できるライブラリに依存します。 – Mark

答えて

4

Excel CONCATENATE()関数を見てみましょう。コンマで区切られた文字列または引用されたリテラルのリストを取ります。

e.g. CONCATENATE("""", A1, """") etc. 

ここで、A1は自分の列の1つです。あなたがやりたいだろうエクセルにこのマクロを使用している場合

私は頻繁に一回限りのSQL挿入のためにこれを行うので、あなたは、二重引用符を使用する場合は、私は、SQLのINSERT文

4

楽しみのために、次のPythonスクリプトを試してみてください。
CSVの文字列に引用符を追加しています。

これは本当に簡単な方法です - あなたのためにうまくいかないコーナーケース(引用符とコンマが埋め込まれた文字列)が見つかる可能性があります。修理する!

(これはあまりコードの行に書かれていないことがわかりました。

import sys 
import re 

def addQuotes(str): 
    matches = re.match('^".*"$', str) 
    if matches == None: 
     return '"' + str + '"' 
    return str 

# Iterate over standard input. NOTE - this isn't line-buffered, don't try using 
# this script interactively... 
for line in sys.stdin: 

    # Remove trailing linefeed. 
    line = line.strip() 

    # Split the line into parts separated by commas. 
    parts = line.split(',') 

    # Add quotes to each part that doesn't have quotes already. 
    newParts = map(addQuotes, parts) 

    # Concatenate the parts back to a single line. 
    concatParts = ','.join(newParts) 

    # And print it. 
    print concatParts 

パイプCSVのようなもの使用して、これにファイル - あなたが別のフィールドセパレータを使用するように出力を変更することはでき

python QuoteCSV.py < input.csv 
1

を?理想的には、フィールド値で決して使用されないものを使用することができます - それでは簡単な検索&の問題を置き換えます。

もう1つの方法は、CSVをSQLテーブルにインポートしてから、すべてのフィールドを引用符で囲んでダンプすることです。

0

を書く:

Option Explicit 

Public Sub OutputQuotedCSV() 
Const QSTR As String = """" 
Dim myRecord As Range 
Dim myField As Range 
Dim vFilename As Variant 
Dim nFileNum As Long 
Dim sOut As String 

'Get a filename to save as 
vFilename = Application.GetSaveAsFilename(filefilter:="Microsoft CSV files,*.csv", _ 
Title:="Save as CSV with fields in double quotes") 

If vFilename = False Then Exit Sub 'User chose Cancel 

nFileNum = FreeFile 
Open vFilename For Output As #nFileNum 
For Each myRecord In Range("A1:A" & _ 
Range("A" & Rows.Count).End(xlUp).Row) 
With myRecord 
For Each myField In Range(.Cells(1), _ 
Cells(.Row, 256).End(xlToLeft)) 
sOut = sOut & "," & QSTR & _ 
Replace(myField.Text, QSTR, QSTR & QSTR) & QSTR 
Next myField 
Print #nFileNum, Mid(sOut, 2) 
sOut = Empty 
End With 
Next myRecord 
Close #nFileNum 
End Sub 

マクロ内のリンクは元のソースを参照します

関連する問題