tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^5: CSVを読み込みたい
投稿日: 2023/02/20(Mon) 10:33
投稿者魔界の仮面弁士
> > 「Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\txtFilesFolder\; Extended Properties="text;HDR=Yes;FMT=Fixed";」
> > 「Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\tsvFilesFolder\; Extended Properties="text;HDR=No;FMT=TabDelimited";」
> これって、「ACE」に対しても同じ書き方で大丈夫でしょうか?

同じ書き方で大丈夫です。
Jet Provider から ACE Providre になっても、CSV 読み書きの仕様は基本的には変わらないです。

Jet 3.51 → Jet 4.0 あたりのタイミングで、指定可能な拡張子に制限が加えられもしましたが、
現行 OS にとってみれば、実質的な違いは無いはず。

なお、拡張子制限については下記を参照してください。
https://support.microsoft.com/ja-jp/topic/0c4042f2-9f1d-f762-d95c-41f19d21bcce

Text IISAM は、データベース操作によって「テキストファイルへの書き込み」が
行えてしまうという特性から、制限が加えられたという事情によるものです。


CSV 以外の面で、Jet から ACE に乗り換える場合に気にするとすれば、このあたりかな。

(1) 対応するデータベースバージョンの変化(*.mdb、*.accdb)
- Jet 3.51 … Version 1.0 / 1.1 / 2.0 / 3.0 / 3.5x への接続が可能
- Jet 4.0 … Version 1.0 / 1.1 / 2.0 / 3.0 / 3.5x / 4.0 への接続が可能
- ACE 12 … Version 1.0 / 1.1 / 2.0 / 3.0 / 3.5x / 4.0 / ACE への接続が可能
- ACE 14 … 3.x / 4.0 / ACE のみのサポート (1.0〜2.0 はサポートされない)
- ACE 15/16 … 4.0 / ACE のみのサポート (1.0〜3.x はサポートされない)

(2) *.xlsx 形式の Excel ファイルの読み書きをサポート(Extended Properties="Excel 12.0 Xml;")
※ *.xls 形式も引き続き扱えます。


> 外部ライブラリ導入についてはハードルが高そうです。
Jet 4.0 Provider や ACE Provider も、OS 標準機能では無いですけれどね。

.NET Framework の標準ライブラリだけという話なら、
 Microsoft.VisualBasic.FileIO.TextFieldParser クラス
を使う手もあります。ただしこのクラスは、セル内に連続した改行があった場合に、
空白行が失われるという制限があるため、個人的には他のパーサーを使った方が安全だと思います。

一方、「セル内改行」「セル内カンマ」などのパターンが無いのであれば、
 「改行」で行単位に分割 → 「,」で列単位に分割 → (必要なら)両端の「"」を除去
だけで済みます。


Imports System.IO
Imports System.Text
Imports System.Linq
Imports System.Text.RegularExpressions
Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        ' http://jusyo.jp/csv/new.php
        Dim csvFile As String = "C:\CSV\47okinaw.csv"
        Dim csvData()() = ReadCsv(csvFile).ToArray()

        Dim tbl As New DataTable("沖縄")
        For Each column In csvData(0)
            tbl.Columns.Add(column, GetType(String))
        Next
        For Each columns In csvData.Skip(1)
            tbl.Rows.Add(columns.Cast(Of Object)().ToArray())
        Next
        tbl.AcceptChanges()

        Me.DataGridView1.DataSource = tbl
    End Sub

    Public Iterator Function ReadCsv(fileName As String) As IEnumerable(Of String())
        For Each line In File.ReadLines(fileName, Encoding.GetEncoding("Shift_JIS"))
            'Yield line.Split(","c).ToArray()
            Yield line.Split(","c).Select(AddressOf TrimQuote).ToArray()
        Next
    End Function

    '「"abc"」を「abc」に切り捨てる
    Private Function TrimQuote(s As String) As String
        'Return ("" & s).Trim(""""c)
        Return If(Regex.IsMatch(s & "", "^"".*"""), s.Substring(1, s.Length - 2), s)
    End Function
End Class

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。