ユーザー定義のファイル保存読込するには

解決


聖二  2004-01-04 21:25:48  No: 81233

お世話になります。よろしくお願い致します。

動的配列のユーザー定義型変数をファイル保存読み込みする時に
エラーが生じてしまいます。
同様な操作で通常の動的配列変数はうまく行っていました。

以下のようです。
ここで、
Input #FileNum, Para(i)のPara  や
Write #FileNum, Para(i)のPara  で
「型が一致しません」とエラーになってしまいます。
どうしたらよろしいでしょうか。
どうか、よろしくお願い致します。

標準モジュールで
Public Type ParaMeter
    Name As String
    Kata As Integer
    X1 As Single
    X2 As Single
    X3 As Single
End Type
Public Para() As ParaMeter

Public ParaMemNum As Integer

フォームで
Option Base 1

Private Sub Form_Load()
    Dim FileNum As Integer
    Dim MyPath As String

    FileNum = FreeFile
    
    FileName = MyPath & "ParaData.txt"
    
    If Dir(FileName) = "" Then
        Open FileName For Output As #FileNum
        Close #FileNum
    End If
    
    i = 1
    Open FileName For Input As #FileNum
        Do While Not EOF(FileNum)
            ReDim Preserve Para(i)
            Input #FileNum, Para(i)
            i = i + 1
        Loop
        ParaMemNum = i - 1
    Close #FileNum

End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    Dim FileNum As Integer
    Dim MyPath As String
    
    FileNum = FreeFile
    
    MyPath = App.Path
    If Right(MyPath, 1) <> "\" Then
        MyPath = MyPath & "\"
    End If
    
    FileName = MyPath & "ParaData.txt"
    
    Open FileName For Output As #FileNum
        For i = 1 To ParaMemNum
            Write #FileNum, Para(i)
        Next i
    Close #FileNum

End Sub
Private Sub Command1_Click()
    ParaMemNum = ParaMemNum + 1
    ReDim Preserve Para(ParaMemNum)
    
    Para(ParaMemNum).Name = Text1.Text
    Para(ParaMemNum).Kata = Text2.Text
    Para(ParaMemNum).X1 = Text3.Text
    Para(ParaMemNum).X2 = Text4.Text
    Para(ParaMemNum).X3 = Text5.Text
    
End Sub


くりちゃん  URL  2004-01-05 01:19:32  No: 81234

これでいけるかも。(ランダムアクセスと混同されましたか?)

Private Sub Form_Load()
    
    Dim FileNum As Integer
    Dim FileName As String
    Dim MyPath As String
    Dim i As Integer

    FileNum = FreeFile
    
    MyPath = App.Path
    
    If Right(MyPath, 1) <> "\" Then
        MyPath = MyPath & "\"
    End If

    FileName = MyPath & "ParaData.txt"

    If Dir(FileName) = "" Then
        Open FileName For Output As #FileNum
        Close #FileNum
    End If

    i = 1
    Open FileName For Input As #FileNum
        Do While Not EOF(FileNum)
            ReDim Preserve Para(i)
            Input #FileNum, Para(i).Name, Para(i).Kata, Para(i).X1, Para(i).X2, Para(i).X3
            i = i + 1
        Loop
        ParaMemNum = i - 1
    Close #FileNum

End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    
    Dim FileNum As Integer
    Dim MyPath As String
    Dim FileName As String
    Dim i As Integer

    FileNum = FreeFile
    
    MyPath = App.Path
    If Right(MyPath, 1) <> "\" Then
        MyPath = MyPath & "\"
    End If
    
    FileName = MyPath & "ParaData.txt"

    Open FileName For Output As #FileNum
        For i = 1 To ParaMemNum
            Write #FileNum, Para(i).Name, Para(i).Kata, Para(i).X1, Para(i).X2, Para(i).X3
        Next i
    Close #FileNum

End Sub


聖二  2004-01-05 08:28:26  No: 81235

くりちゃんさん、本当にありがとうございます。
行き詰まって、暗くなっていたところなので、とても助かりました。
シーケンシャルではメンバをそれぞれ記述しないと行けないのですね。
ランダムファイルの場合と同じような設定でいいのかと思っていました。

うまくいきました。
本当に助かりました。これでまた前に進めます。
またよろしくお願い致します。
解決とさせて頂きます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加