

vbでcsvファイルをdbに登録する際に、一つの文字（～、～、～））として登録したい。  
string.joinを使うということは分かったが、csvの場合どうすればいいか分からない

該当コード

[code]

    Dim strAry As String() = csv  //ここが間違っている？
    Dim s1 As String = String.Join(",", strAry)
    
[/code]

宜しくお願い致します。


CC BY-SA 4.0
2021-10-06T02:07:52.227
82901
2021-10-07T08:58:50.487
2021-10-07T05:38:40.000
32986
48506
question
csv vb.net
VB で CSV ファイルの内容を一つの文字列として登録したい


何かの作業で作成したデータのリストや配列ではなくファイルとして実体のあるものなら、[FileSystem.ReadAllText
メソッド](https://docs.microsoft.com/ja-
jp/dotnet/api/microsoft.visualbasic.fileio.filesystem.readalltext?view=net-5.0)で一つの変数に読み込めば良いのではないですか？

.NET Core系統だと更に事前に[Encoding.RegisterProvider(EncodingProvider)
メソッド](https://docs.microsoft.com/ja-
jp/dotnet/api/system.text.encoding.registerprovider?view=net-5.0)を呼び出しておく必要があるでしょうが。

[code]

    Imports System.Text
    Imports Microsoft.VisualBasic.FileIO
    
    Encoding.RegisterProvider(CodePagesEncodingProvider.Instance)
    Dim s1 As String = FileSystem.ReadAllText("path/to/csvfile", Encoding.GetEncoding(932))
    
[/code]

* * *

あるいは、質問内容では「csvファイルをdbに登録する」と書かれていて「ファイル全体」を1つの文字列にしたいように見えるけれど、考えていることは各行毎に１つの文字列にしたいということである場合は、同様にファイルとして実体のあるものなら、[File.ReadLines
メソッド](https://docs.microsoft.com/ja-
jp/dotnet/api/system.io.file.readlines?view=net-5.0)が使えるでしょう。

文字列のデータとして改行コードを含まないことが条件ですが、以下のようにすれば文字列配列の`databody`に各行単位のデータが入ることになります。  
インデックスで指定すれば任意の行のデータを取得出来るでしょう。  
ヘッダの有無は必要に応じて調整してください。

[code]

    Imports System.IO
    Imports System.Text
    
    Encoding.RegisterProvider(CodePagesEncodingProvider.Instance)
    Dim csvlines() As String = File.ReadAllLines("path/to/csvfile", Encoding.GetEncoding(932))
    Dim headerlines As Integer = 1
    Dim datacount As Integer = csvlines.Length - headerlines
    Dim databody(datacount - 1) As String
    Array.Copy(csvlines, headerlines, databody, 0, datacount)
    
[/code]

* * *

まだ質問の投稿から1日経ったくらいで早いですが、マルチポスト先のコメントにも応答していないようなので、色々な考え方を提示。

質問には「csvファイル」と書かれていますが、実際にはファイルではなく複数の文字列を連結したいと考えて質問している場合、連結して1つの文字列にする方法よりも「複数の文字列をリストや配列に格納する方法」が知りたいのが本当ではないでしょうか？

質問ソースの1行目が正しく動作する事例が1つあり、それは`csv`という変数が`strAry`と同じ文字列の1次元配列で定義されていて、その中に有効なデータが格納されている場合です。

[code]

    Dim strAry As String() = csv  //ここが間違っている？
    
[/code]

それ以外で文字列変数を配列として宣言する方法が分からなかったのであれば、こちらの記事が参考になるでしょう。  
[Visual Basic における配列](https://docs.microsoft.com/ja-jp/dotnet/visual-
basic/programming-guide/language-features/arrays/)  
[【VB.NET入門】配列の使い方まとめ！基礎から応用まで徹底解説](https://www.fenet.jp/dotnet/column/%E8%A8%80%E8%AA%9E%E3%83%BB%E7%92%B0%E5%A2%83/896/)  
[VB.NETで配列を宣言するには？](https://atmarkit.itmedia.co.jp/ait/articles/0503/11/news124.html)

例えば宣言と同時に初期化：

[code]

    Dim strAry As String() = {"ABC", "DEF", "GHI"}
    
[/code]

例えば個数を指定して宣言した後に代入：

[code]

    Dim strAry(2) As String
    strAry(0) = "ABC"
    strAry(1) = "DEF"
    strAry(2) = "GHI"
    
[/code]

例えば個数の増(あるいは減)：

[code]

    ReDim Preserve strAry(5)
    
[/code]

* * *

それでも「csvファイル」である場合、文字列の1次元配列(=1行だけのファイル)であることは殆ど無く、2次元配列(複数行)であることが普通です。  
dbに登録するだけでなく、読み取ったcsvデータを活用する場合には、何かのクラスオブジェクトの配列やリストにするでしょう。  
そういう時には以下で紹介されているようなライブラリを使うのが簡単で早いでしょう。

紹介としてはC#用ですが.NETなのでVBでも使えるでしょう。  
[【まとめ】C#で使えるおすすめCSVライブラリ3選](https://tech-and-investment.com/csv1/)  
[Top 20 NuGet csv Packages](https://nugetmusthaves.com/Tag/csv)  
[【C#】CSV
の読み書きができる「CsvHelper」紹介](https://baba-s.hatenablog.com/entry/2018/05/17/090000)

VisualBasicでやりたい場合はC#でも使われたりするTextFieldParserを使って作ることも出来ます。  
[【VB.NET】TextFieldParserを使って超簡単にCSVファイルを読み込む！](https://www.stellacreate.com/entry/vbnet-
csv-import-TFP)  
[[C#][VB.NET]
TextFieldParserでCSV(TSV)ファイルを読み込む方法](https://webbibouroku.com/Blog/Article/textfieldparser-
csv)  
[VB.NET
TextFieldParserを使ったCSVファイルの読み込み](https://ameblo.jp/ussr1917jp/entry-12604830478.html)  
[VB.NET - CSVファイル読込処理](http://www.mitene.or.jp/%7Ernk/vbdotnet/csvread.html)

いずれの方法でも、csvファイルにどのようなデータがどれくらいの量だけ入っていて、それをどのようにdbへの登録やプログラム上での利用を行うのか明確になっていなければなりません。


CC BY-SA 4.0
2021-10-06T02:33:37.790
82904
2021-10-07T08:58:50.487
2021-10-07T08:58:50.487
26370
26370
82901
answer