[リストへもどる]
一括表示

投稿時間:2004/04/12(Mon) 14:44
投稿者名:つばさくん
Eメール:syojis@muj.biglobe.ne.jp
URL :
タイトル:
CSVファイルの指定行削除
はなちゃんごめんなさい。
掲示する場所を間違えたことと、
もう一つ問題としているタイトルも間違えていました。

再度、掲示します。
CSVファイル(カンマ区切りのテキストファイル)中の
指定したデータ行を削除したい。
あれこれ、調べたのですがわかりませんでした。
よろしくお願いいたします。

投稿時間:2004/04/12(Mon) 15:26
投稿者名:Say
Eメール:
URL :
タイトル:
Re: CSVファイルの指定行削除
普通は行単位で読み込んで、
削除したい行を読み飛ばしながら保存します。

勿論、メモリに余裕があるなら、
一気読みしてvbCrLfでSplitして、
削除したい要素に""を代入して、Joinして
vbCrLf & vbCrLf を vbCrLfにReplaceして
一気書き込みしてもいいですが。

投稿時間:2004/04/13(Tue) 11:40
投稿者名:つばさくん
Eメール:syojis@muj.biglobe.ne.jp
URL :
タイトル:
Re^2: CSVファイルの指定行削除
Sayさん メモリ上での作業も挑戦してみます。
     ありがとうございました。
 
いろいろ試行錯誤を繰り返しており、ちょっと説明が不足しており、すいません。
現在試みているプログラムは、
1.定期的に数値データを計測器より取込、複数CSVファイルへ一時保存する。
2.次にその中から1ファイルを開き、数値データを散布図へする。
3.データ行が300行を超えた時点で、先頭行目(実際は2行目)を削除し、
 新たにデータを書き込み、常に300行のデータを保存する。
です。

投稿時間:2004/04/13(Tue) 20:46
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: CSVファイルの指定行削除
過去のログ No.4848 を試してみて下さい。

投稿時間:2004/04/14(Wed) 21:17
投稿者名:つばさくん
URL :
タイトル:
2行目を削除できるようになりました。
花ちゃんありがとうございました。
CSVファイル指定行とまでは行かなかったのですが
2行目を選択的に削除できるようになりました。

質問なのですが
指定行とするためには、指定した行までのbyte数をきっちり
おさえれば、良いのでしょうか?

ちなみに、こんなプログラムです。
Private Sub Command1_Click()
    Dim DelTxt1      As String
    Dim DelTxt2      As String
    Dim Fso         As New FileSystemObject
    Dim FsoTS       As TextStream
    Dim DelByt1      As Long
    Dim DelByt2      As Long
    Dim FilePath    As String
    Dim bytArray1()  As Byte
    Dim bytArray2() As Byte
    Dim bytArray3() As Byte
    Dim intFileNo   As Integer
    Dim lngFileLenB As Long
    
   '対象とするデータへのパスを設定する
    FilePath = App.Path & "\test.csv"

    ’データの配列を取得する
    Set FsoTS = Fso.OpenTextFile(FilePath)
    DelTxt1 = FsoTS.ReadLine & vbCrLf                   '先頭行データ配列
    DelTxt2 = FsoTS.ReadLine & vbCrLf                  '2行目データ配列
    FsoTS.Close
    Set FsoTS = Nothing

  ’テキストに表示する
    Text3.Text = DelTxt2                               '2行目をテキストに表示

    ’データのバイト数を取得する
    DelByt1 = LenB(StrConv(DelTxt1, vbFromUnicode))      '先頭行のバイト数
    DelByt2 = LenB(StrConv(DelTxt2, vbFromUnicode))    '2行目のバイト数
    lngFileLenB = FileLen(FilePath)                    'ファイル全体のバイト数

   ’配列要素数を設定する
    ReDim bytArray2(DelByt1 - 1)                        '先頭行の配列要素数を設定
    ReDim bytArray3(DelByt2 - 1)                       '2行目の配列要素数を設定
    ReDim bytArray1(lngFileLenB - DelByt2 - 1)          '3行目以降の配列要素数を設定

   ’?????
    intFileNo = FreeFile
    Open FilePath For Binary As #intFileNo
    Get #intFileNo, , bytArray2                         'よくわからない
    Get #intFileNo, , bytArray3
    Get #intFileNo, , bytArray1
    Close #intFileNo
    
  ’テキストボックスへ表示する
  Text1.Text = StrConv(bytArray1, vbUnicode)            '2行目から最終行までをテキストに表示
    Text2.Text = StrConv(bytArray2, vbUnicode)           '先頭行をテキストに表示

  ’データを削除する
  Kill FilePath                                        '更新前ファイルを削除
    
  ’ファイルに書き込む
  intFileNo = FreeFile    
    Open FilePath For Binary Access Write As #intFileNo  '新規に同じ名前で書込
       Put #intFileNo, , bytArray2                       'まずはじめに先頭行を書き込む
       Put #intFileNo, , bytArray1                        '続いて3行目以降のデータ行を書込
    Close #intFileNo

End Sub

投稿時間:2004/04/14(Wed) 22:25
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: 2行目を削除できるようになりました。
足し算と引き算ができればできるかと思います。
総バイト数 − 削除したいバイト数 = 取得したいバイト数

その上で削除したいバイト数を読み飛ばし、取得したいバイト数分だけ読み込む

又、前回にも書きましたが、ここの逆引きヘルプの テキストファイルの最後の数行を
取得する ゆう(U)さん投稿分 のサンプルや テキストファイルの指定行を瞬時に読込む 
でも実現できます。
ファイルの読み書きの基本を理解していれば、取得したい部分だけを取得すればいいだけの
事かと思います。
その上で、どの方法が早いのかを試してみればいいかと。

投稿時間:2004/04/15(Thu) 09:34
投稿者名:つばさくん
URL :
タイトル:
ありがとうございました。
ありがとうございました。
VBを初めて、3週間くらいです。
VBレスキュー(花ちゃん)の
ファイル操作、MSFlexGrid関係とMSChart関係を参考に
プログラムを作成しています。
もしひとりで、考えていたらまず挫折しやめていたと思います。
VBレスキュー(花ちゃん)にアクセスしいろいろな方の
悩み事とかを見ていると、自分だけじゃなくみんな
よちよち歩きしているんだなと思い、がんばろうという気になり
元気が出ます。     以上