• ベストアンサー

バイナリーファイルの追記

VB初心者です。 3レコードからなる90バイトのバイナリーファイルの 最後のレコードだけを上書きしたいのですが、うまく いきません。どう書けば良いのでしょうか? 宜しくお願い致します。 '------------------------------------------------ Public Type REC_INFORMATION AA As Long BB As Single CC As Single DD As Single EE As Single FF As Single GG As Single HH As Integer End Type Public RecInfo As REC_INFORMATION '------------------------------------------------------------- Dim ByteCNT as Long RecInfo.AA = CLng("123") RecInfo.BB = CSng("123") RecInfo.CC = CSng("123") RecInfo.DD = CSng("123") RecInfo.EE = CSng("123") RecInfo.FF = CSng("123") RecInfo.GG = CSng("1") RecInfo.HH = CInt("1") Open "c:\TEST.bin" For Binary As #1 ByteCNT = LOF(1) Seek #1, (ByteCNT - 29) Put #1, , RecInfo Close #1

  • retsu
  • お礼率50% (2/4)

質問者が選んだベストアンサー

  • ベストアンサー
  • todo36
  • ベストアンサー率58% (728/1234)
回答No.2

Randomファイルはレコード単位で扱うべきです。 Open File For Random As #1 Len = len(構造体) レコード数 = (LOF(1) \ len(構造体)) + 1 Get #1, レコード番号, 構造体 Put #1, レコード番号, 構造体 Close #1

retsu
質問者

お礼

todo36さん ありがとうございました。 大変勉強になりました。

その他の回答 (2)

  • kachimi
  • ベストアンサー率40% (12/30)
回答No.3

#1です。 GETしているのであればシーク位置が移動するため再度SEEKする必要があると思います。 しかし、#2さんの言われるようにRandomでレコード単位でされたほうがいいですよ!

retsu
質問者

お礼

kachimiさん ありがとうございました。 また見かけたら宜しくお願い致します。

  • kachimi
  • ベストアンサー率40% (12/30)
回答No.1

出来るような気がするのですが・・・ どのように出来ないのか、補足願います。

retsu
質問者

補足

失礼致しました。補足致します。 一度以前のファイルの最後のレコードのRecInfo.AAを取得し、 今回取得した123と同一であれば上書き,違うのもであればファイルの最後に新しく今回のレコードと追加するという仕様です。 そのコーディングの途中段階であり、"GET"している部分が抜けていました。この先がうまくできないので困っています。 宜しくご指導願います。 '-------------------------------- Open "c:\TEST.bin" For Binary As #1 ByteCNT = LOF(1) Seek #1, (ByteCNT - 29) Get #1, , RecInfo.AA '補足部分 Put #1, , RecInfo Close #1

関連するQ&A

  • ACCESS レポートで同じ値のときは先頭のみ表示したい

    いつもお世話になっております。また教えてください。 下記のようなレポートがあります。 (番号+日付+名前順、番号でグループ化) 番号 日付 名前 金額 1000 0820 AA 1000 1000 0820 BB 2000 1000 0821 CC 3000 1000 0821 DD 4000 1000 0822 EE 5000 1000計      15000 2000 0820 FF 10000 2000 0820 GG 20000 2000 0821 HH 30000 2000 0821 II 40000 2000 0821 JJ 50000 2000計      150000 これを下記のようにしたいのです。 番号 日付 名前 金額 1000 0820 AA 1000       BB 2000    0821 CC 3000       DD 4000    0822 EE 5000 1000計 3件   15000 2000 0820 FF 10000       GG 20000    0821 HH 30000       II 40000       JJ 50000 2000計 2件   150000 1.同じ値は先頭のみ表示する 2.番号グループ内の日付の個数を数える この方法を教えてください。Access2000です。 よろしくお願いします。

  • エクセルの表を回転したいのですが

    こんなことってできるのでしょうか。 1aA 2bB 3cC 4dD 5eE 6fF 7gG という風に書き込んでいる表があるのですが、これを 12345678 abcdefgh ABCDEFGH と書き直したいのです。 ご存じの方、よろしくお願い致します。

  • VBAでCSVファイルを分割したい

    VBAを利用して、あるCSVファイルを一定のレコード数ごとに新しいファイルにファイル分割したいです。 やりたいことは、以下のようなイメージです。 関連サイトなどを参考に自分なりに取り組んでみましたが、なかなかうまくいきません。 VBAでなくても実現できそうですが、ここまでやったので勉強のためにもVBAでやりたいです。 サンプルコードなど教えていただけるとうれしいです。 ヒントでも結構ですので、よろしくおねがいします。 (2レコードずつ分割する例) sample.csv ヘッダ1,ヘッダ2,ヘッダ3,ヘッダ4 aaa@aa.aa,123,あいうえ,111-111 bbb@bb.bb,456,かきくけ,222-222 ccc@cc.cc,789,さしすせ,333-333 ddd@dd.dd,012,たちつて,444-444 eee@ee.ee,345,なにぬね,555-555 fff@ff.ff,678,たちつて,666-666 ↓↓↓ ☆sample_1.csv ヘッダ1,ヘッダ2,ヘッダ3,ヘッダ4   →各ファイルにヘッダも入れたいです。 aaa@aa.aa,123,あいうえ,111-111 bbb@bb.bb,456,かきくけ,222-222 ☆sample_2.csv ヘッダ1,ヘッダ2,ヘッダ3,ヘッダ4 ccc@cc.cc,789,さしすせ,333-333 ddd@dd.dd,012,たちつて,444-444 ☆sample_3.csv ヘッダ1,ヘッダ2,ヘッダ3,ヘッダ4 eee@ee.ee,345,なにぬね,555-555 fff@ff.ff,678,たちつて,666-666

  • 選択による表示の可否を含めた複雑な計算表について

    下記のような計算表を作りたいのですが… AA  1  2  3  4 BB  11  12  13  14  15     ※AAのチェックによって表示され、選択可能    <例>    ・AA-1を選択するとBB-11,12のみ表示して1つのみ選択可能    ・AA-2を選択するとBB-11,12,14のみ表示して   〃    ・AA-3を選択するとBB-11~15表示して     〃 CC  テキストボックスでユーザ入力 DD  テキストボックスでユーザ入力 EE  CC×DD×<AAのチェックとBBのチェックによる数字>     <例>     ・BBの<例>と同じ条件の元で      AA-1---BB-11→15(チェックにより掛ける数字)      〃 ---〃 12→18( 〃 )      AA-2---BB-12→22( 〃 )      〃 ---〃 14→27( 〃 )      AA-3---BB-13→31( 〃 )      〃 ---〃 15→35( 〃 ) FF  Aa  Bb  Cc  Dd  Ee       ※AAとBBの条件と連動して、表示され選択可能      <例>      ・AA-1を選択するとBB-11,12のみ表示し、1つのみを選択。FF-Aaのみ表示      ・AA-2を選択するとBB-11,12,14のみ表示し、   〃  。FF-Aa,Ccのみ表示      ・AA-3を選択するとBB-11~15表示し、    〃    。FF-Bb,Ccのみ表示 GG  セレクトボックスで4割~8割から選択 HH  a  b  c  d  e  f  g      BBの選択内容とFFの選択内容によって表示(選択は1つのみ) ※ 後の計算によって数字変更     <例>      BB-11---FF-A---HH-a~c(a:3,b:6,c:10)      〃 ---〃 B---〃 a,c,f(a:4,c:5,f:8)      〃 ---〃 C---〃 c~g(c:4,d:5,e:8,f:14,g:18)      BB-12---FF-A---HH-a~c(a:11,b:14,c:18)      〃 ---〃 B---〃 b,d,f,g(b:7,d:9,f:12,g:13)      〃 ---〃 C---〃 c~f(c:1,d:3,e:9,f:11) 「計算」ボタンと「リセット」ボタン  ※「計算」ボタンをクリックするとIIとJJ」に計算内容を表示  ※「リセット」ボタンをクリックすると、すべてリセットさせる。AAのみ表示を残す II  EE×GG JJ  (AAとBBとFFのチェックによる数字)×(20-HH)×II÷2    <例>    AA-1---BB-12---FF-A→12(掛ける数字)×(20-HH-a)×II÷2    〃1---BB-12---〃 B→17(掛ける数字)×(20-〃c)×〃÷2                     ・                     ・ -------- 計算が大きく2つに別れて計算という形になるのですが、 <<1>> -AA-1---BB-11---FF-A-|→EEで必要な数字15 | | |-〃12---〃 -|→     〃 18 | | -〃2---BB-11---FF-A, C-|→EEで必要な数字20 | | |-〃 12--- 〃 -|→   〃  22 | | |-〃 14--- 〃 -|→   〃  27 | | -〃3---BB-11---FF-B,E-|→EEで必要な数字28 |   |-〃 12--- 〃 -|→   〃  30 |   |-〃 13--- 〃 -|→   〃  31 |   |-〃 14--- 〃 -|→   〃  32 |   |-〃 15--- 〃 -|→   〃  35 |         ・ -         ・ <<2>> ※ < >の数字は掛ける時に必要な数字 -BB-11---FF-A---HH-a<3> | |   |  |--〃b<6> | |   |  |--〃c<10> | |   | | |   FF-B---HH-a<4> | |   |  |--〃c<5> | |   |  |--〃f<8> | |   | | |   FF-C---HH-c<4> | |   |  |--〃d<5> | |   |  |--〃e<8> | |   |  |--〃f<14> | |   |  |--〃g<18> | | -BB-12---FF-A---HH-a<11> | |   |  |--〃b<14> | |   |  |--〃c<18> | |   | | |   FF-B---HH-b<7> | |   |  |--〃d<9> | |   |  |--〃f<12> | |   |  |--〃g<13> | |   | -      ・ |      ・ ※ < >の数字は掛ける時に必要な数字 <例>AA-1---BB-12---FF-A<12>×(20-HH-a<3>)×II÷2 という感じになります。 大変分かりにくいとは思いますが、ご教授の程よろしくお願いします。

  • 同じレコード単位で纏めて、違うレコードとの間に行挿入をしたい。

    同じレコード単位で纏めて、違うレコードとの間に行挿入をしたい。 A列~D列まで入力されて1000行あります。 A列を基準にソート済みなので以下のようになります。   A列  B列 C列 D列 A1 123   AA  BB  CC A2 123   DD  BB  CC A3 123   DD  EE  CC  A4 456   FF  GG  HH A5 456   JJ  KK  CC A6 789   JJ  LL  MM A7 789   NN  PP  QQ A8 789   RR  PP  CC これでA列の値が相違する場合そこに空白行を挿入したいです。   A列  B列 C列 D列 A1 123   AA  BB  CC A2 123   DD  BB  CC A3 123   DD  EE  CC  A4 A5 456   FF  GG  HH A6 456   JJ  KK  CC A7 A8 789   JJ  LL  MM A9 789   NN  PP  QQ A10 789   RR  PP  CC これを1000行手作業で行うのは大変なので一括で行いたいです。 方法はありますでしょうか? お願いします。

  • 検索、抽出して別の表を作りたい

       A   BC   DE   FG   HI   JK   LM  1      青木  井上  上野  江藤  小川  加藤 2  1日   aa     aa     bb    bb      -     - 3  2日  泊cc  出cc  出cc  出cc   aa  出cc 4  3日  出cc    dd    dd    dd    dd    dd 5  ・ ・  ・ ・  ・ ・  29日   ee  出ff   出ff    -    ee   ee 31 30日  出cc    dd   dd   dd   dd  泊cc 32 31日  出gg  出gg  出cc   ee   -   出cc      ローマ小文字は場所、出=出張、泊=宿泊を伴う出張を表していて こういう表があるのですが、この表を元に別の表を作りたいのですが ・「出」または「泊」のある日にちを若い日付から順に表示させたい <表1>  青木    井上    上野    江藤    小川    加藤   2日cc   2日cc  2日cc  2日cc          2日cc   3日cc  29日ff   29日ff                30日cc  30日cc  31日gg  31日cc               31日cc  31日gg <表2>(※出張は出+泊の人数) 2日 cc出張=計5人 宿泊=1人   3日 cc出張=計1人 29日  ff出張=計2人 30日  cc出張=計2人 宿泊=1人  31日  cc出張=計2人       gg出張=計2人  どなたかよろしくお願いいたします。

  • "excel"もしくは"秀丸"で削除したいデータを同時に複数のデータを

    "excel"もしくは"秀丸"で削除したいデータを同時に複数のデータを選択指定して削除したいのですが、、 よくわかりません。おしえていただけますでしょうか、、 例を下に記入いたします。 =================== 例) 【元のデータ】 aa bb cc dd ee ff gg 削除したいデータ:"aa"と"dd" *この2つを同時に選択指定して削除希望です。 【削除後のデータ】 bb cc ee ff gg =================== もし、エクセルもしくは秀丸で仮に方法が無い場合、他のツールを使用した方法でも 嬉しいです。 よろしくお願いいたします!!

  • DELETEのwhere句について

    SQL文について教えていただけないでしょうか? 力不足のため苦しんでおります。 宜しくお願い致します。 TBLいいの項目EEが100以外かつFFが50以下で 抽出される全ての項目AAをKEYにしてTBLいいを 削除したいのですがわかりません。 DELETEののwhere句について教えてくいただけ ないでしょうか?。  条件  DB:SQLServer2000   TBLああ AA BB CC DD   TBLいい AA EE FF GG  

  • EXCELで指定した範囲の値を検索し、範囲内に対応する行の見出しを調べるには

    EXCEL2003で、シート内に以下のように値が設定されている場合に、 B1からD4の範囲を検索して値が一致した行のA列の値を求めるには どのようにすればよろしいでしょうか。 たとえば、文字列「EE」で検索して「いいい」を求めたいのです。 A B C D 1 あああ AA CC FF 2 いいい BB EE 3 ううう DD 4 えええ GG HH VLOOKUP関数を使用すれば列内や行内での検索は出来ますが、 複数行列内の検索は出来ないようです。 よろしくお願いします。

  • 条件に合ったデータを抜き出す

      A   B   C   D 1 あ   AA   VV   FF 2 い   CC   FF   HH 3 あ   SS   FF   DD 4 う   SS   EE   AA 以上のようなデータが有るときに、別シートに A列のデータを条件に以下のように抜き出したいのです。 別シートの各セルに式が入っていて、上記データを 変更しても別シートの抽出結果が自動で変わるようにしたいです。 ”あ”の抽出   あ   AA   VV   FF   あ   SS   FF   DD ”い”の抽出   い   CC   FF   HH ”う”の抽出   う   SS   EE   AA

専門家に質問してみよう