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で質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) 改行コードについて 4 2022/08/13 14:20
- C言語・C++・C# C言語(構造体) 3 2022/07/05 20:08
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- 飛行機・空港 【民間旅客用航空機メーカー勤務の方に質問です】飛行機の座席のエコノミークラスの記号表記がLF-Yなの 2 2022/07/23 08:18
- Perl RSSにdiv,ul classを付けたいのですがどのようにつけるのかわからないです 2 2022/03/28 01:53
- ノートパソコン パソコンで悩んでいます。 今三年生で建築を学んでいるものです。 使っていたパソコンが壊れてしまったた 4 2023/04/22 03:47
- SEO googleサーチコンソールで、重複URLが多数発生、その修正方法について 2 2023/06/23 16:15
- C言語・C++・C# c言語でユーザ関数を利用して複素数のべき乗と絶対値の数列を計算するプログラムが作りたいです。 3 2023/01/29 22:13
- SEO googleサーチコンソールでの重複ページ(ダブルスラッシュ) 3 2023/06/12 15:00
- 楽器・演奏 マリゴーと、ヨーゼフと、LF どれ買おうかな 1 2022/11/16 12:17
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAのコマンドボタンの文字列の...
-
ソースコードの1行が長いとき...
-
エスケープ文字の復帰(¥r)と...
-
C++で空Enterの入力を判...
-
テキストファイルから改行コー...
-
改行について
-
VBAでCSVをExcelに取り込む時に...
-
改行コードが半角スペースにな...
-
【VB6】項目内に改行コードを含...
-
○個ずつ改行
-
awkで改行を除いて文字列を抜き...
-
C# DataGridViewのセルを改行禁...
-
1行ごとに取得して、その改行...
-
JAVA System.out.println の ...
-
C言語の標準入力で改行しない方法
-
fputsで改行できない
-
ファイル内の1行(レコード)から...
-
データベースにデータを挿入す...
-
jsp 改行コードで改行させて表...
-
texのchapterが改行される
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAのコマンドボタンの文字列の...
-
ソースコードの1行が長いとき...
-
エスケープ文字の復帰(¥r)と...
-
COBOLの改行
-
C++で空Enterの入力を判...
-
改行について
-
ファイルから読み取った改行文...
-
jsp 改行コードで改行させて表...
-
C++でのCRLFについて
-
エクセルVBA 文字列領域が不足...
-
テキストファイルから改行コー...
-
JavaDoc コメントの改行について
-
最終行の改行について
-
JavaMail,本文中の改行について
-
【VBA】エクセルで最後の不要な...
-
文の改行
-
VBAでCSVをExcelに取り込む時に...
-
ラベル(スタティックテキスト)...
-
改行コード(CR/LF)の設...
-
テキストボックス行の桁数を制...
おすすめ情報