CSVの件数

解決


ぬけさく  2003-09-17 02:02:59  No: 79440

現在CSVからデータベースにデータを突っ込むプログラムを作ってたん
ですが、プログレスバーを作って進行状況を見てわかる状態にしたいんです。
が、CSVのデータ件数を単純に取り出す方法ってないですか?

いろいろ考えてみたんですが私の知識じゃ作らないほうが良い処理になって
しまいます(無駄な処理をさせている感じ)。

皆様の知恵を拝借させてくださいませ。

os:windows XP 環境:VB6


nanashi  2003-09-17 02:40:25  No: 79441

TextStreamを使ってAtEndOfLineがTrueになるまでSkipLineして
その回数を数えればレコード数が取得できます。

こんな感じ。

    Dim oFS As FileSystemObject
    Dim oTxt As TextStream
    Dim lCnt As Long
    
    Set oFS = New FileSystemObject
    Set oTxt = oFS.OpenTextFile("Test.csv", ForReading)
    
    lCnt = 0
    With oTxt
        Do Until (.AtEndOfLine)
            .SkipLine
            lCnt = lCnt + 1
        Loop
        
        .Close
    End With
    
    Set oTxt = Nothing
    Set oFS = Nothing
    
    Debug.Print lCnt


ねろ  2003-09-17 03:58:03  No: 79442

要するに、全てのカンマの数を知って
プログレスバーのMax値を設定したいのですよね。
データーを全て読み込んで、何らかの方法で数えなければ無理でしょう。
その為に別にプログレスバーが必要になりそうですね。(^^;
ファイルの長さをMaxに設定して、データーの長さを
足しこんでいったらどおでしょうか。


岡田 之仁  2003-09-17 07:11:24  No: 79443

邪道かもしれませんが・・・
JET40を使い、尚且つ、ISAMのTEXTドライバーでCSVをオープンすれば、

select count(*) from CSV_NAME

のSQL文で取得できますが・・・
ただし、schema.ini ファイルでのフィールド定義情報が必要ですが・・・

※  パフォーマンス的問題が出ます。が、データベースとして同等に
    扱えると言う利点はあります。

※  VB6では使ってましたが、.NETではまだやっていないので、
    実際に動作するコードが書けるかどうかは、未確認です。

以上。


oku  URL  2003-09-17 08:02:15  No: 79444

行数を知りたいだけなら、もっと簡単に出来ますよ。
VBレスキュ−(花ちゃん)のサイトに載ってますよ。
VBレスキュ−(花ちゃん)のFileSystemObject オブジェクト関係に載ってます。
http://www.bcap.co.jp/hanafusa/


ぬけさく  2003-09-17 18:20:20  No: 79445

nanashiさん ねろさん 岡田 之仁さん okuさん
さっそくの回答ありがとうございます。

回答の多さに驚いておりますが、ひとつづつためしてから(かなり時間が
かかりますが)ご報告させていただきます。


ぬけさく  2003-09-17 23:04:47  No: 79446

VBレスキュ−(花ちゃん)のサイトを参考にして解決しました。

皆さんのご協力感謝します。


  2003-11-02 21:06:20  No: 79447

現在私も同様の処理を考えているのですが、『VBレスキュ−(花ちゃん』を見てもまだ理解できません。

どのようにすれば件数を取得できるのか教えて頂けないでしょうか?


モミジ  2003-11-02 21:24:34  No: 79448

「理解」は出来なくても「件数の取得」は出来るかと。

http://www.bcap.co.jp/hanafusa/
      FileSystemObject オブジェクト関係
            テキストファイルの行数を取得

上記のサンプルコードをそのまま試せば出来ると思いますが。


  2003-11-02 21:36:34  No: 79449

これは.netでも大丈夫なのでしょうか?
VB6.0だけですか?

エラーになって動きません。。。


モミジ  2003-11-02 22:23:59  No: 79450

.NETならそう書いて下さいよ!
元質問はVB6です。
.NETは私はやっていません。


ねろ  2003-11-02 23:20:15  No: 79451

質問者の最初の質問は
>CSVのデータ件数を単純に取り出す方法ってないですか?
ですよね
CSVはカンマで区切られたデーターで、行の終わりがCrLfで
終わるデーター形式。
一行に含まれるデーターが全て同じとは限らない訳で、
ファイルの行数を取得しても何の解決にもならないのでは?
VBレスキュ−(花ちゃん)のサイトに乗っているのは
FileSystemObjectを使ってファイルをアペンドモード開き
アペンドモードなので当然最終行を読み込みこれが現在行
になるわけですが、これを表示する方法です。
これでデーター件数が判るのは一行のデーターの数が同じCSVファイルだけです。
もしそのようなCSV形式なら、質問は
”テキスト形式のファイルの行数の取得方法はありますか?”
又は
"一行のデーターの数が同一なCSV形式ファイルのデーター件数の取得方法はありますか?”
となると思いますが。
つまりどうしてこれで判ったのか、理解できないのが当然だと。(^^;


  2003-11-03 04:09:11  No: 79452

いろいろと調べてはいるのですが、どうやらあまりスムーズにはできないのかと思いました。。。

諦めようかと思います。
どうもご迷惑おかけしました。


Y2  2003-11-03 05:07:27  No: 79453

CSV形式って、データの中にコンマが含まれていた場合、
データのコンマなのか、区切りのコンマなのかの区別があるので、
(たしか、コンマが含まれてる場合、ダブルクォーテーションで囲む)
独自で、データ数を数える場合、単にコンマの数をカウントするわけにもいかないので面倒ですよね。


ぬけさく  2003-11-10 19:31:52  No: 79454

Re:ねろさん・誉
毎回、説明不足ですいません。
私が扱っていたCSVでは1つのデータが必ず1行にまとめられているという仕様だったので、
VBレスキュー(花ちゃん)のサイトの引用をして、件数の−1で解決できたんです。

行数さえ取り出せればよいので、"単純にデータ件数を取り出す方法"という表記をしてしまったのですが・・・

確かに誤解を招きますね、以後気をつけさせていただきます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加