はじめまして。早速なのですが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の部分がうまくいかず
困っております。ありきたりの処理なのですぐに検索に引っかかるかと
思ったのですが・・・
どなたかお分かりになる方、お願いします。
なんか微妙に変ですね。
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
こうかな。
(あ、全部strAAになってるや…)
ありがとうございました。朝から会社で試したらばっちり期待通りに動きました。
そこで、質問ついでにたずねたいのですが、
STRING型の変数を構造体に代入する方法も教えていただきたいのですが…
COBOLでいう集団項目に基本項目文字列を転記するみたいなことをVB.NETで
実現したいのですが、よろしくお願いします。
>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
こういう書き方とてもよくない。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
>>COBOLでいう集団項目に基本項目文字列を転記するみたいなことをVB.NETで..
>う! COBOLが全くわからないのですが(^^;
すいません。vbの掲示板でCOBOLを例にだしたのが間違いでした。
でも、実現したかったことは、ねろさんの推測どおりです。
たすかりました。
にしても!そんなすごいことができるのですね。
今日、仕事が終わったらVISUALSTUDIOを買いにいこうと思います。
会社に入社以来ずっとコボラーだったのですが、急にCOBOL+ホストの
システムをVB.NET+DBに移行してくれといわれ途方にくれています。
いい機会なので気合いれて取り組んでみようと思います。
ツイート | ![]() |