テキストファイルから読み込んだデータを構造体に代入するには?

解決


tomoya  2005-05-10 06:06:33  No: 121549

はじめまして。早速なのですがvb6で
Private Type Foo
    strAA As String * 14
    strBB As String * 12
    strCC As String * 8
End Type

Private TypFoo   As Foo

Private Sub Hoge()
    dim Fno as integer
    Fno = freefile
    Open "c:\a.txt" For Random Access Read As #Fno
    Get #Fno, , TypFoo
    Close #Fno
End Sub
のように読み込んだ固定長のテキストデータをtype型に代入していたのと
同じことをVB.NETで行いたいのですがうまくいかず困っています。
Private Structure Foo
    <VBFixedStringAttribute(14)> Dim strAA As String
    <VBFixedStringAttribute(12)> Dim strAA As String
    <VBFixedStringAttribute(8)> Dim strAA As String
End Structure
と構造体を宣言したのですが肝心のfilegetの部分がうまくいかず
困っております。ありきたりの処理なのですぐに検索に引っかかるかと
思ったのですが・・・
どなたかお分かりになる方、お願いします。


ねろ  2005-05-10 06:45:47  No: 121550

なんか微妙に変ですね。
Private Structure Foo
     <VBFixedStringAttribute(14)> Dim strAA As String
     <VBFixedStringAttribute(12)> Dim strAB As String
     <VBFixedStringAttribute(8)> Dim strAC As String
End Structure
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      Dim fo As Foo
      FileOpen(1, "c:\test.txt", OpenMode.Random, , , Len(fo))
      FileGet(1, fo, 1)
      FileClose(1)
End Sub
こうかな。


tomoya  2005-05-10 18:26:15  No: 121551

(あ、全部strAAになってるや…)
ありがとうございました。朝から会社で試したらばっちり期待通りに動きました。
そこで、質問ついでにたずねたいのですが、
STRING型の変数を構造体に代入する方法も教えていただきたいのですが…
COBOLでいう集団項目に基本項目文字列を転記するみたいなことをVB.NETで
実現したいのですが、よろしくお願いします。


ねろ  2005-05-10 23:42:18  No: 121552

>COBOLでいう集団項目に基本項目文字列を転記するみたいなことをVB.NETで..
う!  COBOLが全くわからないのですが(^^;
構造体の各メンバーにアクセスするのではなく、一発で文字列をセットしたいと言うことであれば、
便利なことに、.NETの構造体はクラスの機能を殆ど備えていますので、文字列を各メンバーに
セットするファンクションを実装すればいいのです。
極めて稚拙なサンプルでエラーの処理等は有りませんが、考え方だけ参考にして下さい。

    Const LenStrAA = 14
    Const LenStrAB = 12
    Const LenStrAC = 8
    Private Structure Foo
        <VBFixedStringAttribute(LenStrAA)> Dim strAA As String
        <VBFixedStringAttribute(LenStrAB)> Dim strAB As String
        <VBFixedStringAttribute(LenStrAC)> Dim strAC As String
        Public Sub SetString(ByVal SString As String)
            If SString.Length = LenStrAA + LenStrAB + LenStrAC Then
                strAA = SString.Substring(0, LenStrAA)
                strAB = SString.Substring(LenStrAA, LenStrAB)
                strAC = SString.Substring(LenStrAA + LenStrAB, LenStrAC)
            End If
        End Sub
    End Structure
 
   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
        Handles Button1.Click
        Dim SString As String
        Dim fo As Foo
        SString = "aaaaaaaaaaaaaabbbbbbbbbbbbcccccccc"
        fo.SetString(SString)
    End Sub


ねろ  2005-05-11 00:48:05  No: 121553

こういう書き方とてもよくない。m(__)m
   
×Const LenStrAA = 14
×Const LenStrAB = 12
×Const LenStrAC = 8
    
○Const LenStrAA As Integer = 14
○Const LenStrAB As Integer = 12
○Const LenStrAC As Integer = 8


tomoya  2005-05-11 03:10:26  No: 121554

>>COBOLでいう集団項目に基本項目文字列を転記するみたいなことをVB.NETで..
>う!  COBOLが全くわからないのですが(^^;

すいません。vbの掲示板でCOBOLを例にだしたのが間違いでした。
でも、実現したかったことは、ねろさんの推測どおりです。
たすかりました。
にしても!そんなすごいことができるのですね。
今日、仕事が終わったらVISUALSTUDIOを買いにいこうと思います。
会社に入社以来ずっとコボラーだったのですが、急にCOBOL+ホストの
システムをVB.NET+DBに移行してくれといわれ途方にくれています。
いい機会なので気合いれて取り組んでみようと思います。


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

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






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