
TextFieldParserクラスによるCSVファイルの読み込みを試してみました。
http://www.atmarkit.co.jp/fdotnet/dotnettips/487 …
すげー便利と思いましたが、
セル内で空行が圧縮される現象が起きました。
解決方法はありませんか?
例は項目が2つの1レコードのデータで、item2に複数行データが入っています。
==エディタでの見た目==
item1,item2
"aaa","
abc
defg
h
ijklmn
"
==エディタでの見た目==
==仮に改行を視覚化すると==
item1,item2{cr}{lf}
"aaa","{lf}abc{lf}defg{lf}{lf}h{lf}{lf}ijklmn{lf}"
==仮に改行を視覚化すると==
これを読み込むと、
"defg"と"h"の間と、
"h"と"ijklmn"の間の改行がどこかに行ってしまいました。
==エディタでの見た目==
item1,item2
"aaa","
abc
defg
h
ijklmn
"
==エディタでの見た目==
そういう仕様なのでしょうか?
No.2ベストアンサー
- 回答日時:
> 余計な事をオプションではなく、強制的にやってしまうのは作った人が意地悪なのか、まともな物を作って提供するとサードパーティから物言いが付くとか、単にセンスが無いだけなのか、どちらにしても残念な事です。
元々,TextFieldParserは簡易データベースとしての読み込みを想定しているのだと思います。
そのため,空行自体はレコードとして意味をなさず,読み飛ばしているのだと思います。
> 代替的な方法何かありませんか?
自分で用意するのがよいでしょう。
DOBON.NETさんのページも参考になると思います。
site: CSV形式のファイルをDataTableや配列等として取得する: .NET Tips: C#, VB.NET, Visual Studio
http://dobon.net/vb/dotnet/file/readcsvfile.html
> あと、実装コードは簡単にみる事ができますか?
> Trim結果が空の場合に行を省く部分だけ取り除いた物を別の名前で自作するとか簡単にできるでしょうか?
実装コードは
site: .NET Framework Libraries
http://referencesource.microsoft.com/netframewor …
からダウンロードすることができますし,
site: Visual Studio 2008で見る.NET Frameworkのソースコード - @IT
http://www.atmarkit.co.jp/fdotnet/insiderseye/20 …
にあるように,ステップインも可能です。
ただし,.NET Framework 3.5 SP1をインストールしている場合,ステップインできませんので注意してください。
なお,EULAを読んだのですが,修正して使う事が許されているかどうかはわかりませんでした。
最終的には契約の問題になるので,修正しての利用に関しては自己の責任において,EULA違反にならないと確信できた場合にのみ行ってください。
>元々,TextFieldParserは簡易データベースとしての読み込みを想定しているのだと思います。
>そのため,空行自体はレコードとして意味をなさず,読み飛ばしているのだと思います。
いや、空(レコード)行は読み飛ばしてもまだ許せるのですが、生きてる行の中の一項目の中身ですから、簡易データベースとしての読み込みを想定しているとしても、完全アウトです。
マルチライン項目ですから、長文の説明や備考欄などが考えられます。
日本文は行間も読みますから、勝手に消すのはダメでしょう。
それはさておき、
懇切丁寧にお答え頂き、有難うございます。
どうするかは、EULA違反とか微妙な問題が絡んできそうですので、
ゆっくりと、見て、考えて、十分に参考にさせて頂きたいと思います。
No.1
- 回答日時:
空行を読み飛ばすのは仕様です。
MSDN: TextFieldParser.ReadFields メソッド (Microsoft.VisualBasic.FileIO)
http://msdn.microsoft.com/ja-jp/library/microsof …
実装コードを見てみましたが,
Microsoft.VisualBasic.FileIO.TextFieldParser.IgnoreLine
メソッドが,文字列のTrim結果が空の場合にTrueを返すようになっており,
手を加える余地はないようです。
有難うございます。
難易度が少しでも高いと、解答はほぼ付かないですが、具体的で的確な解答頂き、感謝と同時に幸運を感じております。
余計な事をオプションではなく、強制的にやってしまうのは作った人が意地悪なのか、まともな物を作って提供するとサードパーティから物言いが付くとか、単にセンスが無いだけなのか、どちらにしても残念な事です。
手を加える余地はないですか、、、
代替的な方法何かありませんか?
あと、実装コードは簡単にみる事ができますか?
Trim結果が空の場合に行を省く部分だけ取り除いた物を別の名前で自作するとか簡単にできるでしょうか?
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAのコマンドボタンの文字列の...
-
ソースコードの1行が長いとき...
-
テキストファイルから改行コー...
-
エスケープ文字の復帰(¥r)と...
-
VBAでCSVをExcelに取り込む時に...
-
jsp 改行コードで改行させて表...
-
C# DataGridViewのセルを改行禁...
-
ファイルから読み取った改行文...
-
C++で空Enterの入力を判...
-
C# csvでセル内で改行するには
-
Excel VBS、ADODB.Streamで改行
-
エクセルVBA 文字列領域が不足...
-
改行コード(CR/LF)の設...
-
CSVファイルの改行コード判別
-
エディットボックスで改行
-
delphi でのコード上でTab を入...
-
「続行するには何かキーを押し...
-
VBSにて改行コードの検出・置換
-
選択したセルでダブルクリック...
-
バイナリファイルに改行コード...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAのコマンドボタンの文字列の...
-
ソースコードの1行が長いとき...
-
エスケープ文字の復帰(¥r)と...
-
jsp 改行コードで改行させて表...
-
改行について
-
VBAでCSVをExcelに取り込む時に...
-
【VBA】エクセルで最後の不要な...
-
ラベル(スタティックテキスト)...
-
ファイルから読み取った改行文...
-
Excel VBAからBeckyを起動して...
-
C++で空Enterの入力を判...
-
JAVA Spring 改行コードを含む...
-
変数の中の改行コードをBRタグ...
-
秀丸の正規表現で複数行にわた...
-
awkで改行を除いて文字列を抜き...
-
エクセルVBA 文字列領域が不足...
-
vb.netでのリッチテキストボッ...
-
グレープシティのSPREAD...
-
COBOLの改行
-
最終行の改行について
おすすめ情報