■ 現在のこのページの役立ち度:
表示されない場合こちらのリンクからもご覧になれます。
■ このページの役立ち度を評価する:
役立ち度を評価してください。
(1(左):あまり役立たない - 5(右):大変役立った):
■ ページの共有:
[ サイト内検索 ]
カスタム検索
#365-4ファイルからデータの読み込み方。tomo2003-12-04(木) 14:00
     #366-4RE#365:ファイルからデータの読み込み方。匿名3662003-12-04(木) 14:31
     #367-4RE#366:ファイルからデータの読み込み方。tomo2003-12-04(木) 14:35
     #368-3RE#367:ファイルからデータの読み込み方。せつら2003-12-04(木) 15:09
     #371-4RE#368:ファイルからデータの読み込み方。tomo2003-12-05(金) 09:55
     #373-4RE#371:ファイルからデータの読み込み方。せつら2003-12-05(金) 10:31
     #375-3RE#373:ファイルからデータの読み込み方。tomo2003-12-05(金) 11:21
     #380-4RE#373:ファイルからデータの読み込み方。匿名3802003-12-05(金) 23:39
#365-4
ファイルからデータの読み込み方。
いつも大変お世話になっております。

ファイルからデータを読み込む際にある一定の個数づつ読み込んで変数に格納したいのです。
1,2,3,4,5,6,7,8,9,10,…と書かれたファイルを
1,2,3,4,5
6,7,8,9,10
11,12,13,14,15、
…
…
といったイメージに並び替えたいのですが…
実際は数百個単位ごとでの読み出しになります。
Type point
 data(5) as Integer
End type
を利用して考えましたがさっぱりわからなくなってしました。
  
よろしくお願いします。
#366-4
RE#365:ファイルからデータの読み込み方。
読み込むデータは1行のカンマ区切りなんですよね?
だったら、
Line Input # ステートメントで1行丸ごとString変数に読み込んで
Split 関数で文字型配列に変換し、その配列をFor...Next ステートメント
あたりでくり返し処理を行うようにし、その中で5つの数字区切りずつ展開
させて行く方法もありますね。
#367-4
RE#366:ファイルからデータの読み込み方。
お返事ありがとうございます。

> 読み込むデータは1行のカンマ区切りなんですよね?
本当にごめんなさい。
データはカンマ区切りではないです。
 
いい加減な例を出してしまいました。
実際のデータはバイナリで4バイトごとのデータを読み込んでいます。
■が4バイトのデータとすると

■■■■■■■■■■■■…を
■■■■■
■■■■■
■■■■■
■■■■■
……
…
にするようなイメージです。

ほんとに申し訳ありません。
#368-3
RE#367:ファイルからデータの読み込み方。
なにやら、説明がパズルのようで良く判らないのですが、こんな感じなのでしょうか?

Private Type AAA
    lDim(4) As Long
End Type

Private Sub Command1_Click()
    Dim A As AAA
    Dim i As Integer
    Dim j As Long

    Open "c:\aaa.dat" For Binary As #1
    For j = 1 To LOF(1) Step LenB(A)
        Get #1, , A

        For i = 0 To 4
            Debug.Print CStr(A.lDim(i)) + ",";
        Next i
        Debug.Print
    Next j
    Close #1
End Sub
#371-4
RE#368:ファイルからデータの読み込み方。
お返事ありがとうございました。

> なにやら、説明がパズルのようで良く判らないのですが、こんな感じなのでしょうか?
すみません。せつらさんのコードの意味がやっとわかりました。

まったくのその通りでした。お手数おかけしました。
もうひとつやりたいことがあります!!
最初のjのloopでAという変数(i)は0から4まで順番に表示していますよね。
それを次のjのloopでは変数(i)に4から0までの順番に表示していきたいのです。
jにカウントをつけて奇数か偶数かでやろうと思いましたが…うまく行きません。
 
 For j = 0 To LOF(1) Step LenB(A)
      Get #FileNo, , A
      For p = 0 To CountMax
           If p = p / 2 = 0 Or p = 0 Then
               For i = 0 To 4
                    Debug.Print CStr(A.IDim(i)) + ",";
                Next i
                Debug.Print
            Else
              For i = 4 To 0 Step -1
                    Debug.Print CStr(A.IDim(i)) + ",";
                Next i
            End If
        Next p
    Next j

実際にはメモリーにCopyする関数〔まだ調べ中〕つかってその順番で変数に格納できたらと思います。
 
お手数おかけいたしますがどうかよろしくお願いします。
#373-4
RE#371:ファイルからデータの読み込み方。
奇数か偶数かを判定するには、Mod 演算子を使うと良いでしょう。

    If p Mod 2 Then '奇数
        …
    Else            '偶数
        …
    EndIf

2で割った余りが0か1か、ですね。

メモリコピーの命令はVBにはありません。アドレスを意識させないのがVBですし。速度
を求めるならば、C言語を使ったほうが簡潔で高速なものになります。

最終的に何をしたいのかが見えませんが、C言語に負けないくらい高速な方法は、Type 宣言
でファイルのレイアウトとメモリのレイアウトを一致させておいて、いっきに読み込む方法
(今回の例みたいな感じですね)かと思います。
#375-3
RE#373:ファイルからデータの読み込み方。
早速のお返事ありがとうございます。
> 奇数か偶数かを判定するには、Mod 演算子を使うと良いでしょう。

       p = j / 20
            If p mod 2 Then
               For i = 0 To 4
                    Debug.Print CStr(A.IDim(i)) + ",";
                Next i
                Debug.Print
            Else
              For i = 4 To 0 Step -1
                    Debug.Print CStr(A.IDim(i)) + ","; 
            Next i
             Debug.Print
      End if

でうまく行かないのはj のLoop の考え方がまだ理解していないせいだと思います。
LOF(1)はファイルのサイズ〔総バイト数〕ですよね。
LenB(A)はIDim(i)が4バイトとすると4*5=20バイト
でj/20でカウント数にはならないのでしょうか?

> メモリコピーの命令はVBにはありません。
そうですか…ありがとうございます。

> 最終的に何をしたいのかが見えませんが、C言語に負けないくらい高速な方法は、Type 宣言
> でファイルのレイアウトとメモリのレイアウトを一致させておいて、いっきに読み込む方法
> (今回の例みたいな感じですね)かと思います。

大量のデータを読みとってそれぞれのAごとにある計算して最終的にΣAを計算します。
丁寧なご回答本当にありがとうございます。
#380-4
RE#373:ファイルからデータの読み込み方。
> 奇数か偶数かを判定するには、Mod 演算子を使うと良いでしょう。

and 1 の方が良いかも
このページと関連する記事:
#399-2RE#373:ファイルからデータの読み込み方。2003-12-09(火) 10:52
#13752-0Inputについて2001-01-07(日) 16:54
#21934-0EBCDICについてのしつもん2002-08-07(水) 16:15
#17996-0for nextの条件2001-09-26(水) 20:11
#21351-0読み出しの時間2001-06-14(木) 07:00
#16318-0配列について2001-05-25(金) 22:57
#3966-01999年12月2日(木)11:121999-12-02(木) 10:49
#15214-0ビットマップ上の特定エリアの面積2001-03-21(水) 23:39
#16780-01バイト文字と2バイト文字の混在するテキストデータの取得2000-02-24(木) 15:58
#26278-0FileCopyでファイルが多すぎますってどう言うこと2000-07-22(土) 11:08
お探しの情報は見つかりましたか?お困りの問題は解決しましたか?
サイト内検索, 似た記事検索で見つからなくてもあきらめずに掲示板で質問してみましょう。
VB初心者友の会があなたのお役に立てれば幸いです。また、本ページの投稿者の方々にこの場を借りて感謝致します。
本ページは過去ログを集めて自動構成しています。よろしければこのページに関するフィードバックをお願いします。
(※ 構成の誤り、広告等の不適切な記事、リンク切れ、読めないページの報告など)