none
【UWP】【C#】【CSV】CSVファイルを扱う際のデファクトスタンダードはあるのか RRS feed

  • 質問

  • UWP/C#の開発において、

    CSVファイルを読み込む、書き込む際には、

    デファクトスタンダードなライブラリはあるのでしょうか。

    「UWP アプリ開発」フォーラムを「CSV」で検索、

    googleで「UWP CSV」で検索をしてみましたが、

    特にめぼしい記事は見当たりませんでした。

    従来のWindowsデスクトップアプリケーションなどであれば、

    Microsoft.VisualBasic.IO.TextFieldParserの利用、

    Jet Providerの利用(System.Data.OleDb.OleDbConnection、System.Data.OleDb.OleDbDataAdapter)、

    などがあるかと思います。

    (UWP開発では上記は、利用不可・・・?)

    よろしくお願い致します。

    2018年4月15日 8:38

回答

  • CSV (Character-Separated Values) そのものを直接扱うユーティリティは存在しないはずです。サードパーティ製のライブラリは探せば見つかるかもしれませんが。CSVにはXMLのような標準規格が存在しないからです。

    最新のアプリ - UWP アプリでの CSV ファイルの解析 | MSDN Magazine

    書き出しはSystem.IO.TextWriter (StreamWriter) を使ってください。

    問題は読み込みですが、CSVをどのレベルでサポートするかによって、実装の難易度も変わります。

    1つのCSVレコードの各フィールドに改行文字を含まず、1レコード1行の単位で記録されていることが保証されるのであれば、System.IO.TextReader (StreamReader) でテキスト行を読み込んだあと、正規表現とループを使ってフィールドを分割します。CSVの行パースに関しては自分で調べてください。さらにフィールドに区切り文字が含まれないことが分かっているのであれば、正規表現すら使う必要がなく、String.Split()メソッドで十分です。

    もしMS Excelのように、ダブルクォーテーションで囲まれたフィールドであれば改行文字を含んでいても1フィールドとみなす(レコードが複数行に渡っていても柔軟に解釈できる)ような仕様を実現するには、単純な行ごとの解析では済まなくなります。

    ちなみにCSVの区切り文字はASCIIコンマ0x2cとは限りません。ASCIIタブ0x09やASCII空白0x20を使うこともあります。ヨーロッパではASCIIセミコロン0x3bが使われることがあります。

    CSVは方言が多く、いかなるフォーマットでも受け付けるような万能ライブラリを実装するのは費用対効果の面で現実的ではないため、通例アプリケーション開発ではデータ側の仕様に制約を持たせ、制約の範囲内で必要十分な機能を満たすパーサーを実装します。

    なおComma-Separated Valuesの仕様としてはRFC4180が存在します。
    • 編集済み sygh 2018年4月18日 11:46
    • 回答としてマーク k_u 2018年4月21日 0:50
    2018年4月15日 17:43

すべての返信

  • CSV (Character-Separated Values) そのものを直接扱うユーティリティは存在しないはずです。サードパーティ製のライブラリは探せば見つかるかもしれませんが。CSVにはXMLのような標準規格が存在しないからです。

    最新のアプリ - UWP アプリでの CSV ファイルの解析 | MSDN Magazine

    書き出しはSystem.IO.TextWriter (StreamWriter) を使ってください。

    問題は読み込みですが、CSVをどのレベルでサポートするかによって、実装の難易度も変わります。

    1つのCSVレコードの各フィールドに改行文字を含まず、1レコード1行の単位で記録されていることが保証されるのであれば、System.IO.TextReader (StreamReader) でテキスト行を読み込んだあと、正規表現とループを使ってフィールドを分割します。CSVの行パースに関しては自分で調べてください。さらにフィールドに区切り文字が含まれないことが分かっているのであれば、正規表現すら使う必要がなく、String.Split()メソッドで十分です。

    もしMS Excelのように、ダブルクォーテーションで囲まれたフィールドであれば改行文字を含んでいても1フィールドとみなす(レコードが複数行に渡っていても柔軟に解釈できる)ような仕様を実現するには、単純な行ごとの解析では済まなくなります。

    ちなみにCSVの区切り文字はASCIIコンマ0x2cとは限りません。ASCIIタブ0x09やASCII空白0x20を使うこともあります。ヨーロッパではASCIIセミコロン0x3bが使われることがあります。

    CSVは方言が多く、いかなるフォーマットでも受け付けるような万能ライブラリを実装するのは費用対効果の面で現実的ではないため、通例アプリケーション開発ではデータ側の仕様に制約を持たせ、制約の範囲内で必要十分な機能を満たすパーサーを実装します。

    なおComma-Separated Valuesの仕様としてはRFC4180が存在します。
    • 編集済み sygh 2018年4月18日 11:46
    • 回答としてマーク k_u 2018年4月21日 0:50
    2018年4月15日 17:43
  • 回答ありがとうございます。
    ユーティリティは存在しない旨、了解です。

    リンクして頂いている「最新のアプリ」記事も、
    投稿前に見ておりました。
    2年前の記事なので、状況変わっているのか含めた、今回の質問でした。

    他に回答もないようなので、クローズしたく思います。
    ありがとうございました。

    2018年4月21日 0:49