Line.Splitの記述について への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 SNAKE  (社会人)
投稿日時
2012/7/6 16:25:40
魔界の仮面弁士様
Items() As String = Split(Line, """,""")
と書いて、プログラムを動かしたところ、意図した通りに動作しました。
丁寧に教えていただき、ありがとうございました。
Items() As String = Split(Line, """,""")
と書いて、プログラムを動かしたところ、意図した通りに動作しました。
丁寧に教えていただき、ありがとうございました。
投稿者 shu  (社会人)
投稿日時
2012/7/6 16:11:40
区切りを「","」
としてしまうと
魔界の仮面弁士さんが示している通り
最初と最後の項目に余計な「"」が残るので
Items = Line.Split(","c).Select(Function(s) s.Trim(""""c)).ToArray()
とされた方がよいです。
(2008より前の環境でしたら、ループ文で回してTrimして下さい)
としてしまうと
魔界の仮面弁士さんが示している通り
最初と最後の項目に余計な「"」が残るので
Items = Line.Split(","c).Select(Function(s) s.Trim(""""c)).ToArray()
とされた方がよいです。
(2008より前の環境でしたら、ループ文で回してTrimして下さい)
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2012/7/6 15:24:03
ごめんなさい! 先ほどはテストもせずに回答してしまいました。
この場合は、Split メソッドを Split 関数に置き換えて
> Items = Line.Split(""",""")
上記はSplit メソッドに引数1個だけを渡す呼び出しですが、実は
Split メソッドには「String 引数を1つだけ受け取る」オーバーロードがありません。
そのため上記は
> Items = Line.Split("""")
> と書いたのと同じ結果になってしまいます。
ということは、上記のパターンA に解釈されてしまうようですね。失礼しました。
この場合は、Split メソッドを Split 関数に置き換えて
Items() As String = Split(Line, """,""")
としてみてください。これならば区切り文字が「","」として扱われます。> Items = Line.Split(""",""")
上記はSplit メソッドに引数1個だけを渡す呼び出しですが、実は
Split メソッドには「String 引数を1つだけ受け取る」オーバーロードがありません。
そのため上記は
(可能性A) Items = Line.Split(CType(""",""", Char)) 'Items = Line.Split(CChar(""","""))
(可能性B) Items = Line.Split(CType(""",""", Char())) 'Items = Line.Split(""",""".ToCharArray())
のいずれかの意味に解釈されて実行されたものと思われます。(可能性B) Items = Line.Split(CType(""",""", Char())) 'Items = Line.Split(""",""".ToCharArray())
> Items = Line.Split("""")
> と書いたのと同じ結果になってしまいます。
ということは、上記のパターンA に解釈されてしまうようですね。失礼しました。
投稿者 (削除されました)  ()
投稿日時
2012/7/6 15:21:29
(削除されました)
投稿者 SNAKE  (社会人)
投稿日時
2012/7/6 14:48:13
魔界の仮面弁士様
ご回答ありがとうございます。
Items = Line.Split(""",""")
と書いてプログラムを動かしたところ、「,」がItemとして認識されてしまいました。
『"あいうえお","かきくけこ","さしすせそ"』
であった場合、
Items(0) は 『 』※ブランク(それともnull?)
Items(1) は 『あいうえお』
Items(2) は 『,』
となり、結果的に
Items = Line.Split("""")
と書いたのと同じ結果になってしまいます。
すみませんが、何かわかりますでしょうか?
よろしくお願いします。
ご回答ありがとうございます。
Items = Line.Split(""",""")
と書いてプログラムを動かしたところ、「,」がItemとして認識されてしまいました。
『"あいうえお","かきくけこ","さしすせそ"』
であった場合、
Items(0) は 『 』※ブランク(それともnull?)
Items(1) は 『あいうえお』
Items(2) は 『,』
となり、結果的に
Items = Line.Split("""")
と書いたのと同じ結果になってしまいます。
すみませんが、何かわかりますでしょうか?
よろしくお願いします。
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2012/7/6 13:50:39
> ","を指定する場合、どのように記述すればよいでしょうか?
「,」ではなく、「","」で区切りたいという事でしょうか?
その場合は、
上記のようにすると、たとえば Line が
『"あいうえお","かきくけこ","さしすせそ"』
であった場合、「","」で区切ることで、
「,」ではなく、「","」で区切りたいという事でしょうか?
その場合は、
Items = Line.Split("","")
ではなく、 Items = Line.Split(""",""")
と書きます。(文字列中に「"」を含める場合は、"" と連記します)上記のようにすると、たとえば Line が
『"あいうえお","かきくけこ","さしすせそ"』
であった場合、「","」で区切ることで、
Items(0) は 『"あいうえお』
Items(1) は 『かきくけこ』
Items(2) は 『さしすせそ"』
のように分割されます。
Items(1) は 『かきくけこ』
Items(2) は 『さしすせそ"』
投稿者 SNAKE  (社会人)
投稿日時
2012/7/6 13:34:57
初級講座の第30回 ファイル処理の「4.CSVの読み込み」で
Line.Splitの区切り文字に、","を指定する場合、どのように記述すればよいでしょうか?
以下のように記述するとエラーになってしまいます。
Line.Split("","")
よろしくお願いします。
Line.Splitの区切り文字に、","を指定する場合、どのように記述すればよいでしょうか?
以下のように記述するとエラーになってしまいます。
Line.Split("","")
よろしくお願いします。
Items = Line.Split(","c).Select(Function(s) s.Trim(""""c)).ToArray()
先頭項目、最終項目の「”」を取る場合は、上記の書き方で出来るのですね。
まだまだ未熟のため、初めて見る書き方ですが、解読して使わせていただきます。
アドバイス、ありがとうございました。