none
VB6 / ファイル読み込み、コンパイルエラー RRS feed

  • 質問

  • 質問ばかりで申し訳ございません。
    >箇所です。
    以下のことをしたいです。

    まず、ローカルにファイルを作成します。⇒ c:\test.txt
    このファイル値は不定でabc, ABCD, abcdeであったりします。

    Dim value As String * 10

    'ファイル読み込み
    Private Function dataread() as String
    Dim testfile as String
    Open "c:\test.txt" For Input as #testfile
    Close #testfile 
    End Function
    >ファイル読み込みは、これでOKですか?

    value=dataread()

    >10桁のvalueエリアに入る値はどのように判定されますか?
    例えば返り値が"abc"のとき、後ろの7桁はどのように判定されますか?null値ですか?
    valueエリアには"abc"だけ入るようにしたいです。

    >これらのステートメントは上位行に置くと下記のコンパイルエラーになります。
    "End Sub、End FunctionまたはEnd Property以降にはコメントのみが記述できます。"
    下行の初期各変数宣言の後に置くとコンパイルエラーは消えます。
    原因が解りません。

    >画面スクリプトが定義されている前、先頭行に置くと下記のエラーがででまったく実行できません。
    出来たらここに置いて最初に実行したいのです。
    回避策はございますか?

    '0' を読み込めません。
    行 0: ファイル C:\Control.ctl が読み込めません。

    2012年7月27日 11:57

回答

  • >ファイル読み込みは、これでOKですか?

    Private Sub Command1_Click()
        Dim value As String
        value = dataread
    End Sub
    Private Function dataread() As String
        Dim testfile As String
        Open "C:\test1.txt" For Input As #1
            Input #1, testfile 'abc
            'Input #1, testfile 'ABCD
            'Input #1, testfile 'abcde
        Close #1
        dataread = testfile
    End Function

    >10桁のvalueエリアに入る値はどのように判定されますか?
    例えば返り値が"abc"のとき、後ろの7桁はどのように判定されますか?null値ですか?
    valueエリアには"abc"だけ入るようにしたいです。

    Dim value As String * 10を使うと、文字の後にスペースが入り常に10文字となる
    ので不要ではないでしょうか?
    n = Len(Trim(value)) でスペースを取り除き確認できます。

    >これらのステートメントは上位行に置くと下記のコンパイルエラーになります。
    "End Sub、End FunctionまたはEnd Property以降にはコメントのみが記述できます。"
    下行の初期各変数宣言の後に置くとコンパイルエラーは消えます。
    原因が解りません。

    VBAでも、VB6でも同じで、変数の宣言や関数の宣言場所に若干ルールが有ります。
    グローバル変数、ローカル変数、命令文の場所など、私は、サンプルを入力しながら
    覚えたようです。

    『これは、変数を宣言する場所と宣言の方法による違いです。』
    http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_050_04.html

    >画面スクリプトが定義されている前、先頭行に置くと下記のエラーがででまったく
    実行できません。 出来たらここに置いて最初に実行したいのです。 回避策はございますか?

    フォームを表示する前に処理するものを書きます。
    Private Sub Form_Load()

     この一連の処理を入れます。
     '0' を読み込めません。
      行 0: ファイル C:\Control.ctl が読み込めません。
    End Sub

    ボタンや、テキストボックスを張り付けるフォームをダブルクリックすると
    Private Sub Form_Load() End Subが自動作成されます。

    2012年7月27日 14:24

すべての返信

  • >ファイル読み込みは、これでOKですか?

    Private Sub Command1_Click()
        Dim value As String
        value = dataread
    End Sub
    Private Function dataread() As String
        Dim testfile As String
        Open "C:\test1.txt" For Input As #1
            Input #1, testfile 'abc
            'Input #1, testfile 'ABCD
            'Input #1, testfile 'abcde
        Close #1
        dataread = testfile
    End Function

    >10桁のvalueエリアに入る値はどのように判定されますか?
    例えば返り値が"abc"のとき、後ろの7桁はどのように判定されますか?null値ですか?
    valueエリアには"abc"だけ入るようにしたいです。

    Dim value As String * 10を使うと、文字の後にスペースが入り常に10文字となる
    ので不要ではないでしょうか?
    n = Len(Trim(value)) でスペースを取り除き確認できます。

    >これらのステートメントは上位行に置くと下記のコンパイルエラーになります。
    "End Sub、End FunctionまたはEnd Property以降にはコメントのみが記述できます。"
    下行の初期各変数宣言の後に置くとコンパイルエラーは消えます。
    原因が解りません。

    VBAでも、VB6でも同じで、変数の宣言や関数の宣言場所に若干ルールが有ります。
    グローバル変数、ローカル変数、命令文の場所など、私は、サンプルを入力しながら
    覚えたようです。

    『これは、変数を宣言する場所と宣言の方法による違いです。』
    http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_050_04.html

    >画面スクリプトが定義されている前、先頭行に置くと下記のエラーがででまったく
    実行できません。 出来たらここに置いて最初に実行したいのです。 回避策はございますか?

    フォームを表示する前に処理するものを書きます。
    Private Sub Form_Load()

     この一連の処理を入れます。
     '0' を読み込めません。
      行 0: ファイル C:\Control.ctl が読み込めません。
    End Sub

    ボタンや、テキストボックスを張り付けるフォームをダブルクリックすると
    Private Sub Form_Load() End Subが自動作成されます。

    2012年7月27日 14:24
  • ありがとうございます。

    質問ばかりで申し訳ございません。
    >箇所です。

    >テストしていなのですがC:\test1.txtが存在しないときは、null値が返されるますか?それとのループ状態になりますか?

    >上記、dataread()をタイマーコントロールは以下のようにしますがOKですか? Interval値は3秒にします。

    TimeOut = False
    Timer1.Interval = 3000
    Timer1.Enabled = True

    Private Sub Timer1_Timer()
      Do While dataread() < 3
         DoEvents
         If TimeOut = True Then
           Exit Do
         End If
      Loop
    End Sub

    >タイムアウトを起こしたときの、返り値はnull値が返されるますか?

    2012年7月30日 13:49
  • Fuda1です。

    >箇所です。
    どこでしょう?

    >テストしていなのですがC:\test1.txtが存在しないときは、null値が返されるますか?それとのループ状態になりますか?
    「実行エラー’62’:
    ファイルにこれ以上データーがありません。」
    こんなエラーがでます。

    >上記、dataread()をタイマーコントロールは以下のようにしますがOKですか? Interval値は3秒にします。

    Dim TimeOut As Boolean
    Private Sub Command1_Click()
        Timer1.Enabled = True
        Debug.Print "スタート 3秒待ちです。"
    End Sub
    Private Sub Command2_Click()
        Timer1.Enabled = False
        Debug.Print "停止しました。"
    End Sub
    Private Function dataread() As String
        Dim testfile As String
        Open "c:\test1.txt" For Input As #1
            Input #1, testfile 'abc
        Close #1
        dataread = testfile
    End Function
    Private Sub Form_Load()
        Timer1.Enabled = False
        Timer2.Enabled = False
        Timer1.Interval = 3000
        Timer2.Interval = 10000
        TimeOut = False
    End Sub
    Private Sub Timer1_Timer()
      Dim strReadData As String
      Timer2.Enabled = True
      strReadData = dataread()
      
      Do While Len(strReadData) < 3
         DoEvents
         If TimeOut = True Then
           Debug.Print "タイムアウトです。"
           Timer1.Enabled = False
           Exit Do
         End If
         strReadData = dataread()
      Loop
      
      Debug.Print strReadData
      Timer2.Enabled = False
    End Sub
    Private Sub Timer2_Timer()
        TimeOut = True
    End Sub

    タイムアウトは、若干修正してあります。『タイムアウトを起こしたときの、返り値はnull値が返されるますか?』
    このプログラムでは無しです。

    openの戻り値
    http://dobon.net/vb/bbs/log3-4/1944.html

    2012年7月31日 1:09
  • ありがとうございます。

    >プログラムでは無しです。
    strReadData = "" '無しとはこういうことですか?

    >null値が返るようにする方法はございますか?

    >Timer1、Timer2はタイマーのプロパティですね?

    2012年7月31日 13:43
  • Fuda1です。

    >プログラムでは無しです。
    strReadData = "" '無しとはこういうことですか?

    >null値が返るようにする方法はございますか?

    Private Sub Timer1_Timer()
      Dim strReadData As String
      Timer2.Enabled = True
      strReadData = dataread()
       Do While Len(strReadData) < 3
         DoEvents
         strReadData = dataread()
         If TimeOut = True Then
           Debug.Print "タイムアウトです。"
           Timer1.Enabled = False
           strReadData = ""
           Exit Do
         End If
      Loop
        If strReadData = "" Then
        Debug.Print "ヌルです。"
      Else
        Debug.Print strReadData
      End If
       Timer2.Enabled = False
    End Sub

    「null値が返るようにする方法」どこに返したら宜しいのでしょうか?

    >Timer1、Timer2はタイマーのプロパティですね?

    「ツールボックス」にございます「タイマー」をフォームに貼り付け、タイマーをダブルクリックすると自動で作成された関数で、タイマーイベントで、指定した間隔で呼び出され実行されます。

    2012年7月31日 19:51
  •  「質問」の仕方が、大変マズいと思います。

    >箇所です。

     多くの場合、大なり記号は、他の人の投稿を引用する場合に用います。この書き方では、「箇所です」という言葉をどこから引用してきたのかわかりません。代わりに番号が振ってあれば、「何番については」と、説明する方も楽です。


    >ファイル読み込みは、これでOKですか?
    >10桁のvalueエリアに入る値はどのように判定されますか?
    例えば返り値が"abc"のとき、後ろの7桁はどのように判定されますか?null値ですか?
    valueエリアには"abc"だけ入るようにしたいです。

     試してみればわかると思うのですが、なぜ、質問するのでしょう?FUDA1さんが返答するまで、2時間半かかっています。それだけの時間があれば、何十回も試せると思うのですが?


    >これらのステートメントは上位行に置くと下記のコンパイルエラーになります。
    >画面スクリプトが定義されている前、先頭行に置くと下記のエラーがででまったく実行できません。

     ここからは、VB6.0 の言語仕様をご存知ではないように見受けられます。そうであれば、フォーラムで質問するのではなく、まずは書籍で勉強して下さい。「ウェブ ページなどを見て」でなく「書籍で」とするのは、書籍なら「金銭」という対価を明示的に払うので、「しなければ」という気になるからです。また、気がついたことを書き留めることもできます。何より、体系的に順番に説明されています。

     なお、「上位行」「先頭行」という言葉が何を意味しているのか、わかりません。何に対して「上位」「先頭」なのでしょう?


    Jitta@わんくま同盟

    2012年8月1日 13:29