プロが教えるわが家の防犯対策術!

いつもお世話になっております。

現在VB6.0にて、CSVファイルを読み込む処理をしています。
・ファイル読み込みにて1行ファイルを読み込む。
・Split関数で「,」で区切って項目ごとに配列に保持する。
というロジックで作成しているのですが、
項目内に改行コードが存在する場合にうまく読み込めません。
(1行ずつ読んでるので当然ですが…)

項目内のコードをLF、実際の行の改行をCR+LFで区別すると読み込む
のは分かるのですが、項目内の改行コードがCR+LFの場合でも、
正しく読み込みたいです。

以上です。よろしくお願い致します。

A 回答 (5件)

    • good
    • 1

意味的に、列に相当する、数字は一定ではないのですか


フィールド数 5(カンマ4つ)ーー第1レコード(Line Inputで読んで)
3(カンマ2つ)ーー第2レコード
2(カンマ1ツ)ーー第3レコード
・・
のようであればSplitしたUbound数を足して行き、5になったら
一般通常でのケースの、次行の扱いをするロジックで解決しませんか。
それで不可能なら、この質問のケースの、たまたまの好都合条件を捉えて、意味的に先頭フィールドを探すとかしかなくなる。
他フィールドにはない。例えば完成形のデータを考えると、先頭に7桁の定桁数字が来るとか。
コンピュタープログラム作成と言うのは、特賞を捉えて処理を進める
学だとお思います。
    • good
    • 0

#1 Wizard_Zeroです。



ダブルクォートでくくられているのであれば、
・ダブルクォートで終わる行はそのままSplit
・それ以外なら次の行も連結

でいけると思います。
ただ、データ内にカンマがあればこれまた厄介で、地道にダブルクォートを考慮しながら切り分ける必要があります。
(これも、行の前後のダブルクォート取り除いて "," で分解すればいいんですけどね。", " のように間にスペースがあったりするとまた厄介という・・・)
    • good
    • 0

根本的に設計ミスです。



項目内に改行を含む場合は、CSVはダブルクォーテーションでくくる形式にするようにするのが、定石です。

この回答への補足

ご回答ありがとうございます。
記述漏れでしたが、
CSVファイルは全ての項目がともダブルクォーテーションでくくられています。
説明不足で申し訳ありません。

補足日時:2009/05/20 11:00
    • good
    • 0

CSVファイルの1レコードあたりの項目数が固定という前提で、Splitで分解したときに項目数が足りない時は次の行と連結してSplitする。



という方法を思いついたのですが、レコードの最後の項目が改行されていたらうまくいきませんね・・・。
この場合、次の行には前の行における最後の項目の残りだけが記録されるので、カンマのない行は前の列と連結としたいところですが、そうなると今度は、最初の項目で改行されていたら・・・というジレンマに陥ります。
(最初と最後の項目が絶対に改行されないのであればこのあたりを考慮する必要はありませんが…)

どちらにしても、レコードに改行が含まれていることを明確に知る手段が必要になるでしょう。
・レコード内の改行コードはLFに限定する
・改行コードのあるレコードはダブルクォーテーションでくくる
などのルールがあれば、それにあわせて読み込みも出来るようになります。

もしこのようなことが出来ないのであれば、100%の精度で読み込むことはできないため、読み込んだあとにレコードを手動で変更できる手段を提供する必要があると思います。

この回答への補足

ご回答ありがとうございます。
記述漏れでしたが、
・改行コードのあるレコードはダブルクォーテーションでくくる
は既に実現されています。
説明不足で申し訳ありません。

補足日時:2009/05/20 10:59
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!