現在CSVからデータベースにデータを突っ込むプログラムを作ってたん
ですが、プログレスバーを作って進行状況を見てわかる状態にしたいんです。
が、CSVのデータ件数を単純に取り出す方法ってないですか?
いろいろ考えてみたんですが私の知識じゃ作らないほうが良い処理になって
しまいます(無駄な処理をさせている感じ)。
皆様の知恵を拝借させてくださいませ。
os:windows XP 環境:VB6
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
要するに、全てのカンマの数を知って
プログレスバーのMax値を設定したいのですよね。
データーを全て読み込んで、何らかの方法で数えなければ無理でしょう。
その為に別にプログレスバーが必要になりそうですね。(^^;
ファイルの長さをMaxに設定して、データーの長さを
足しこんでいったらどおでしょうか。
邪道かもしれませんが・・・
JET40を使い、尚且つ、ISAMのTEXTドライバーでCSVをオープンすれば、
select count(*) from CSV_NAME
のSQL文で取得できますが・・・
ただし、schema.ini ファイルでのフィールド定義情報が必要ですが・・・
※ パフォーマンス的問題が出ます。が、データベースとして同等に
扱えると言う利点はあります。
※ VB6では使ってましたが、.NETではまだやっていないので、
実際に動作するコードが書けるかどうかは、未確認です。
以上。
行数を知りたいだけなら、もっと簡単に出来ますよ。
VBレスキュ−(花ちゃん)のサイトに載ってますよ。
VBレスキュ−(花ちゃん)のFileSystemObject オブジェクト関係に載ってます。
http://www.bcap.co.jp/hanafusa/
nanashiさん ねろさん 岡田 之仁さん okuさん
さっそくの回答ありがとうございます。
回答の多さに驚いておりますが、ひとつづつためしてから(かなり時間が
かかりますが)ご報告させていただきます。
VBレスキュ−(花ちゃん)のサイトを参考にして解決しました。
皆さんのご協力感謝します。
現在私も同様の処理を考えているのですが、『VBレスキュ−(花ちゃん』を見てもまだ理解できません。
どのようにすれば件数を取得できるのか教えて頂けないでしょうか?
「理解」は出来なくても「件数の取得」は出来るかと。
http://www.bcap.co.jp/hanafusa/
FileSystemObject オブジェクト関係
テキストファイルの行数を取得
上記のサンプルコードをそのまま試せば出来ると思いますが。
これは.netでも大丈夫なのでしょうか?
VB6.0だけですか?
エラーになって動きません。。。
.NETならそう書いて下さいよ!
元質問はVB6です。
.NETは私はやっていません。
質問者の最初の質問は
>CSVのデータ件数を単純に取り出す方法ってないですか?
ですよね
CSVはカンマで区切られたデーターで、行の終わりがCrLfで
終わるデーター形式。
一行に含まれるデーターが全て同じとは限らない訳で、
ファイルの行数を取得しても何の解決にもならないのでは?
VBレスキュ−(花ちゃん)のサイトに乗っているのは
FileSystemObjectを使ってファイルをアペンドモード開き
アペンドモードなので当然最終行を読み込みこれが現在行
になるわけですが、これを表示する方法です。
これでデーター件数が判るのは一行のデーターの数が同じCSVファイルだけです。
もしそのようなCSV形式なら、質問は
”テキスト形式のファイルの行数の取得方法はありますか?”
又は
"一行のデーターの数が同一なCSV形式ファイルのデーター件数の取得方法はありますか?”
となると思いますが。
つまりどうしてこれで判ったのか、理解できないのが当然だと。(^^;
いろいろと調べてはいるのですが、どうやらあまりスムーズにはできないのかと思いました。。。
諦めようかと思います。
どうもご迷惑おかけしました。
CSV形式って、データの中にコンマが含まれていた場合、
データのコンマなのか、区切りのコンマなのかの区別があるので、
(たしか、コンマが含まれてる場合、ダブルクォーテーションで囲む)
独自で、データ数を数える場合、単にコンマの数をカウントするわけにもいかないので面倒ですよね。
Re:ねろさん・誉
毎回、説明不足ですいません。
私が扱っていたCSVでは1つのデータが必ず1行にまとめられているという仕様だったので、
VBレスキュー(花ちゃん)のサイトの引用をして、件数の−1で解決できたんです。
行数さえ取り出せればよいので、"単純にデータ件数を取り出す方法"という表記をしてしまったのですが・・・
確かに誤解を招きますね、以後気をつけさせていただきます。
ツイート | ![]() |