VB等からCSVファイルを生成する際に文字情報の中に含まれる
禁則文字 (例:カンマ等) をチェックする必要がありますが、
考えられる範囲ではカンマしか思いつきませんでした。
他にチェックする文字列はありますでしょうか?
CSVファイルを生成する際の禁則文字を教えて下さい。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

テキストボックスで入力された文字列をCSVファイルに落とすということで回答します。



コントロール文字はテキストボックスに入力できないので禁則する必要はありません。
文字列をダブルクォーテーションで括るならば、カンマは禁則文字ではありません。
よってダブルクォーテーションのみを禁則すればいいと思います。

以上は一般論です。細かいところは受け側のアプリの仕様に依存すると思います。
    • good
    • 0

 ASCII 以外のコントロール文字?

    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QCSV書込みの際、カンマで位置がずれる

VB.NET初心者です
変数に必要なデータを入れて、それをCSVに書き込もうとしているのですが、
データの中にカンマを含むものが存在して、
エクセルで開くと本来1セルでよいところが、2セル使って
他の行と比べるとずれてしまいます

たとえば、A~Eを変数として

A=あ
B=い,い
C=う
D=え
E=お

というデータがあって、それをA,B,C,D,Eの順に
横一列でCSVにした場合

「あ い,い う え お」

と5列にしたいところが、

「あ い い う え お」

と6列になってしまうのです。
これはどのように解決すればよいでしょうか?
どうかご教授願います。


[開発環境]
WinXPPRO/VB.NET2003/Excel2000

Aベストアンサー

確かに・・・

strCsvData = """A"""
strCsvData += ","
strCsvData += """B"""
strCsvData += ","
strCsvData += """C"""
strCsvData += ","
strCsvData += """D"""
stbCsvData += ","
stbCsvData += """E"""

だと "A","B","C","D","E" となりますね。

何故か・・・それは A~E を変数として記述してないからです。
わかりやすく言うと "" でくくった A は文字列として認識されます。
変数として利用したい場合は A を変数として使ってあげる必要があるのです。

strCsvData = """
strCsvData += A
strCsvData += """
strCsvData += ","
strCsvData += """
strCsvData += B
strCsvData += """
strCsvData += ","
strCsvData += """
strCsvData += C
strCsvData += """
strCsvData += ","
strCsvData += """
strCsvData += D
strCsvData += """
stbCsvData += ","
stbCsvData += """
strCsvData += E
strCsvData += """

このようにすれば A~E を変数として使ってあげることになります。

いくら A~E を変数として宣言しても "A" と A は違う物です。
"A" は文字列「A」、A は変数「A」です。

---------------------------------------------------------------
わかりにくい場合のテストコード

Dim strTest As String
Dim strData As String

'「文字列」を変数に格納
strTest = "文字列"
'(1) strDataには「文字列」が格納される
strData = strTest
'(2) strDataには「strTest」が格納される
strData = "strTest"

'(1)では strTest を変数として利用、(2)では strTest という文字列として利用

デバッグしてみて下さい。

確かに・・・

strCsvData = """A"""
strCsvData += ","
strCsvData += """B"""
strCsvData += ","
strCsvData += """C"""
strCsvData += ","
strCsvData += """D"""
stbCsvData += ","
stbCsvData += """E"""

だと "A","B","C","D","E" となりますね。

何故か・・・それは A~E を変数として記述してないからです。
わかりやすく言うと "" でくくった A は文字列として認識されます。
変数として利用したい場合は A を変数として使ってあげる必要があるのです。

strCsvData = """...続きを読む

QUNICODE文字が含まれているかのチェック

お世話になります。

VBAを使用して、
セルに、UNICODEE文字が含まれているかのチェックをしたいと考えております。
・できれば、どの文字がUNICODE文字かどうか知りたい。
・最低でもどのセルにUNICODE文字が含まれているか知りたい
という形ですが、もし、ご存知の方教えて頂けないでしょうか?


宜しくお願い致します。

Aベストアンサー

#2の回答者です。
>最低でもどのセルにUNICODE文字が含まれているか知りたい
ということで、#2のユーザー定義関数を利用した、シート全体を探すマクロを加えておきます。どちらも、標準モジュールを使います。

'//
Sub Macro_8996251()
Dim Rng As Range
Dim c As Variant
On Error Resume Next
Set Rng = ActiveSheet.Cells.SpecialCells(xlCellTypeConstants, 23)
If Err() <> 0 Then Exit Sub
On Error GoTo 0
For Each c In Rng.Cells
 If CheckUNICODE(c.Value) = 1 Then
   c.Interior.ColorIndex = 3
 End If
Next c
End Sub
'///

Qデータにカンマが入ったCSVデータのread方法

VBにてCSVデータを読み込むロジックを組んでいるのですが
データの中にカンマが入ったものがたまにあります。
通常通り読むとデータのカンマを区切りのカンマと間違え正しく変数に読み込まれません。
たとえばCSVデータが下記の場合
123,de-ta,12,000,jjjj
実際のデータは
123
de-ta
12,000
jjjj
ですが
12,000を2個のデータと認識して
123
de-ta
12
0000
jjjj
のようになってしまいます。
どなたか12,000をちゃんと読める方法をご存知の方お力をお貸しください。
よろしくお願い致します。

Aベストアンサー

こんにちは
そのアプリは、固定長出力はできないでしょうか。
二重引用符もだめだとすると、規則性を利用してロジックで分けるしかありません。
例えば・・
Line Input で1行ずつ取り込み。
念のためカンマの数をカウントしてみる。
カンマの位置で、データを切り出す。Instr()かVB6のSplit()で。
IsNumeric(str)を利用して、データが数値か文字列かを判断する。
例ですと、数値の後ろの項目は文字列になっているので、文字列が後ろに来たら、そこまでの数値を連結する。
てな具合です。
では!

Q文字列チェック!ある文字からある文字までの値を取得するには?

"http://dailynews.yahoo.co.jp/fc/local/tokyo_metropolitan_government/"

という文字列があったとして"/"の右から3番目から4番目の間の文字列(この場合 fc)を取得するにはどうすればいいんでしょうか?教えて下さい

Aベストアンサー

Dim j, k As String
Dim a, b As Long

j = "http://dailynews.yahoo.co.jp/fc/local/tokyo_metropolitan_government/"

a = InStr(InStr(InStr(1, j, "/") + 1, j, "/") + 1, j, "/")
b = InStr(InStr(InStr(InStr(1, j, "/") + 1, j, "/") + 1, j, "/") + 1, j, "/")

k = Mid(j, a + 1, b - a - 1)

これでkに"fc"が入ります。Instrは文字列から特定の文字の位置を求める関数です。
「3番目から4番目」の3や4が変数である場合は、

k = Mid(j, x, 1)
などとして xを1から len(j)までforで回し、"/"が何字目に出てくるかを記録するといいと思います。

Qvb.netでCSVファイルを変換して新しいCSVファイルを作りたいの

vb.netでCSVファイルを変換して新しいCSVファイルを作りたいのですが、どのようにすれば良いかヒントを教えていただけないでしょうか?

A組,10代,10
A組,20代,20
A組,30代,30
B組,10代,40
B組,20代,50
B組,30代,60
C組,10代,70
C組,30代,80

この様なCSVファイルを変換して

,A組,B組,C組
10代,10,40,70
20代,20,50,
30代,30,60,80

という表のようなCSVファイルを作りたいのです。
データベースなどに入れずに、ファイルtoファイルでの変換がしたいです。
最初のファイルの1列目と2列目の項目をそれぞれ配列に入れて重複をなくす位までは思いつくのですが、そこから先がどの様にすれば良いかよく分かりません。
ヒントだけでも良いのでよろしくお願いいたします。

Aベストアンサー

SortedDictionaryを使うのは如何でしょう?
Dim Q As New SortedDictionary(Of String, _
    SortedDictionary(Of String, Integer))
Qのキーは10代、20代、等の項目になります。
QのデータはSortedDictionaryで、キーはA組、B組等、
データは数値(3列目)です。
ランダムに書き込んでも、ソートされて記録されますので、
ファイルの入力処理後にFor Each文でデータを出力すれば
目的のように出力できます。

Dim A As New StreamReader("C:~.csv", _
    Encoding.GetEncoding("shift_jis"))
Dim B As New SortedDictionary(Of String, Integer)
Dim C As New SortedDictionary(Of String, _
    SortedDictionary(Of String, Integer))
Dim D As String
Dim E
Do Until A.EndOfStream
    D = A.ReadLine
    E = D.Split(",")
    If Not B.Keys.Contains(E(0)) Then B.Add(E(0), 0)
    Dim F As SortedDictionary(Of String, Integer)
    If C.Keys.Contains(E(1)) Then
        F = C(E(1))
        If F.Keys.Contains(E(0)) Then
            F(E(0)) = F(E(0)) + E(2)
        Else
            F.Add(E(0), E(2))
        End If
    Else
        F = New SortedDictionary(Of String, Integer)
        F.Add(E(0), E(2))
        C.Add(E(1), F)
    End If
Loop
A.Close()
Dim G = New StreamWriter("C:\~.csv", False, _
    Encoding.GetEncoding("shift_jis"))
For Each H As String In B.Keys
    G.Write("," & H)
Next
G.WriteLine("")
For Each H As String In C.Keys
    G.Write(H)
    Dim F As SortedDictionary(Of String, Integer) = C(H)
    For Each D In B.Keys
        If F.Keys.Contains(D) Then
            G.Write("," & F(D).ToString())
        Else
            G.Write(",0") '省略時はコメントアウト
        End If
    Next
    G.WriteLine("")
Next
G.Close()

SortedDictionaryを使うのは如何でしょう?
Dim Q As New SortedDictionary(Of String, _
    SortedDictionary(Of String, Integer))
Qのキーは10代、20代、等の項目になります。
QのデータはSortedDictionaryで、キーはA組、B組等、
データは数値(3列目)です。
ランダムに書き込んでも、ソートされて記録されますので、
ファイルの入力処理後にFor Each文でデータを出力すれば
目的のように出力できます。

Dim A As New StreamReader("C:~.csv", _
    Encoding.GetEncoding("shift_jis"))
Dim B As...続きを読む


人気Q&Aランキング

おすすめ情報