たびたび申し訳ございません。
前回のときはこのように件数を取ることで納得したのですが
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Dim Fso As New FileSystemObject
Dim FsoTS As TextStream
Dim KENSU As Integer
KENSU = 0
'ファイルの末尾から書き込みモードで開きます
Set FsoTS = Fso.OpenTextFile("test.csv", ForAppending)
'書き込まれているところまでの行数が知りたいので、現在の行数"-1"
KENSU = FsoTS.Line - 1
Text41.Text = KENSU
FsoTS.Close
Set FsoTS = Nothing
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
これだと実際に使うCSVファイルの件数は正しく取れるのですが、べつのテスト用のCSVのときには
最初から4〜6ちかくの値が入ってしまってうまくいきません。
同じ方法でエクセル・ワード・テキストにも実行してみたのですが、正しい値が取れたのは
テキストだけで、エクセル・ワードはCSVと同じような現象がおきています。
原因および対処方法について、考えられる事があればお教え下さい。
os:windows XP 環境:VB6
※補足
>最初から4〜6ちかくの値が入ってしまってうまくいきません。
最初というのは、データがまったく入っていない空の状態の事です。
最初に4〜6行の空白行で、それ以降値が入ったデータで試しましたが、うまくいきましたよ。
エクセル・ワードファイルは
テキスト形式ではないのでもちろんうまくいかないと思います。
もしかして拡張子がCSVになってるだけで、CSV形式ではないとか言うオチでは?
okuさん、返答ありがとうございます。
CSV形式ファイルは今回初めてさわるので詳しい事はよくわかりませんが、
実際に使うCSVファイルも別のテスト用CSVファイルもプロパティを
確認したところ[Microsoft Excel CSV ファイル]になっているので、
CSV形式ではあると思いますが・・・(--;
そのプロパティというのは拡張子がCSVだからCSV形式だと表現されているのだと思われます。
Okuさんのおっしゃっているのは本来XLS等の拡張子になっているファイルの拡張子を"*.csv"にしたようなファイルでは無いのか? という事だと思います。
んで、私のほうでも実験しましたが、空ファイルを指定しても大丈夫でした。
もしかしてそのテスト用のCSVファイルとやらですが、空白行は入っていないでしょうか?
見た目は空でも、改行が入っていればデータ無しのレコードが一件あることになります。(メモ帳ではちょっと気づき難い)
例えばそのテストデータですが、新規テキスト文書を作成し、ファイル名をtest.csvに変更しただけのファイルを入力にした場合でも4〜6行が返ってきますか?
ちょっと蛇足かもしれませんが、
当初の目的であったCSVの件数を知り、進行状況を表示する方法に関してですが、
n/212件 みたいな表示をしたいのであれば仕方無いですが
もしパーセント表示でよければ次のような方法もあります。
-------------------------------------------------------------
Dim Fno As Long 'ファイル番号
Dim Fsize As Long 'ファイルサイズ
Dim FPos As Long '次のレコードの読み込みバイト位置
Dim CsvRec As String '読み込むCSVレコード
Dim Per As Long '全体の読み込み率
Fno = FreeFile
Open "c:\temp\testcsv.txt" For Input As #Fno
Fsize = LOF(Fno)
Do Until EOF(Fno)
Line Input #Fno, CsvRec
If Len(CsvRec) > 0 Then '改行のみのレコードは処理しない。
'書き込み処理を入れる。
End If
FPos = Seek(Fno)
Per = (FPos - 1) * 100 \ Fsize
'プログレスバーのパーセントの更新処理を入れる。
DoEvents
Loop
Close #Fno
-----------------------------------------------------------
この方法だと、件数ではなくバイト単位での進行状況になってしまいますが、
先に件数を調べてから行うより効率的なのと、元のCSVファイルを作るにあたり、Excel等の仕様やユーザーの操作によって、後ろに大量の空白レコードが入ってしまった場合等でも対処が出来ます。
一応参考までという事で
CSV形式とは、所詮テキストファイルです。
CSVファイルをテキストエディタ等(メモ帳や秀丸)で開いてみてください。
中身がちゃんと見えればOKです。
テキストファイルにカンマやタブで、さも項目があるように見せてるだけです。
ちなみにエクセルファイルをテキストエディタ等で開いてみれば
違いは一目瞭然です。文字化けみたいでちゃんと見えないはずです。
エクセルは、セルと言う概念があるので、
ファイルの中に、どこのセルに値が入っているや
セルに罫線や結合されているなどの情報も入っていると思うので、
テキストエディタ等では人間が見ても解読不能な化け化けな文字が表示されます。
マイクロソフトの人間なら解読出来るのかな?(~_~)
okuさん 電気さん ご教授ありがとうございます。
調べてみたら文字化けしました。未熟者ですいません m(_ _)m
ちゃんとしたCSV形式ファイルでは正しく件数が取れることが確認できました。
電気さんの方法を参考にしてこれからいろいろ改良してみたいと思います。
ありがとうございました。
ツイート | ![]() |