Private Sub Command1_Click()
step = 0.25
ramda = 0.5
Open "C:\hosei1.txt" For Input As #1
Dim RecCnt As Integer
Dim Data(1 To 400)
RecCnt = 1
Do While Not EOF(1)
If (RecCnt > 400) Then
Exit Do
End If
Input #1, Data(RecCnt)
RecCnt = RecCnt + 1
Loop
Close #1
Open "C:\hosei2.txt" For Output As #2
surface = 1
l = 400
Do While surface < l
g = 0
h = 0
i = surface
Do While i < l
h = h + (Data(i + 1) * Exp(-((i - surface + 1) * step) / ramda) + g) * step / 2
g = Data(i + 1) * Exp(-((i - surface + 1) * step) / ramda)
z = CSng(h / ramda * (1 - Exp(-(step * (l - surface) / ramda))))
i = i + 1
Loop
Print #2, CSng(z)
surface = surface + 1
Loop
Close #2
End Sub
このようなプログラムで補正計算を無事することができました(^o^)。
どうも有難うございました。
>フォーム上に表示したいとのことですが、どのようにコードを書いたのでしょうか? できれば、そのコードを記載してください
計算過程をテキストボックスに出したかったのでフォーム上にText1をつくり、
Text1.Text=Text1.Text & CSng(z) & vbCrLf
というコード(これは私が持っているVBの参考書の例題にありました)を書いたのですが、実行後、Text1には横に続けて値が表示されて最初の値しか分からない(ドラッグして動かせば全ての値はみれますが)といったようになってしまいうまくいきませんでした(このあとグラフ作成するので一列に表示されてほしい)。
また、このText1にスクロールバーを付けて全ての値をスクロールにより見れるようにしたかった(計算の終了が分かると同時にコピーできる。)のですが、参考書にも説明が書かれておらず分かりませんでした。参考書の例題には、例題の実行結果の絵がフォーム上にスクロールバー付きのテキストボックスで表示されています(vbCrLfの説明もありません)。
どうすればテキストボックスにスクロールバー付きで表示できるのでしょうか?
また、MSDNに大量の情報が書かれているので思うように知りたいことを調べることができません。何か良い方法があるのでしょうか?
いろいろ教えて頂いて申し訳ないのですが、よろしくお願いします。
Textファイル一行に1データと仮定して
Dim sBuf As String
Dim hFile As Integer
Dim dData() As Double
Dim iNumbOfData As Integer
Dim iCalcPtr As Integer
hFile = FreeFile
Open "c:\temp\hoge.txt" For Input As hFile
Do
If EOF(hFile) <> False Then Exit Do
Line Input #hFile, sBuf
ReDim Preserve dData(iNumbOfData)
dData(iNumbOfData) = Val(sBuf)
iNumbOfData = iNumbOfData + 1
Loop
For iCalcPtr = 0 To UBound(dData)
Debug.Print dData(iCalcPtr)
Next iCalcPtr
こんにちは。itohhといいます。
VBのヘルプ(MSDNライブラリー)は確認されました?
とりあえず、こちらに回答します。
1.まずは、ファイルの読み込みについて
> Data(399) = Input(400, #1)
ファイルの入力のInput文では一気に全レコードを読み込めません。
レコード数分、繰り返し読み込みましょう。
(MSDNライブラリーのInputの説明にサンプルが載っていますよ)
とりあえず、コードのサンプルを記載しますね。
Dim RecCnt As Integer
RecCnt = 0
' ファイルの終端までループを繰り返します。
Do While Not EOF(1)
If(RecCnt > 399) Then
' 配列より大きくなったらループを抜ける
' (配列よりも多く設定しようとするとエラーになります)
' 必要ならエラー処理を書いてください
Exit Do
End If
Input #1, Data(RecCnt) ' 配列n番目に読み込む
RecCnt = RecCnt + 1
Loop
2.計算のループについて
> Do While surface < l
これって、以下のループのほうがシンプルではないでしょうか?
For surface = 0 To l
For i = surface To l
' 計算処理
Next i
Next surface
For文の使用方法の詳細はMSDNライブラリーで確認してください。
3.ファイルへの書き出し処理
読み込みと同じです、まず、ファイルをオープンしてからPrint文で出力します。
これも、MSDNライブラリーのPrintの説明にサンプルが載っていますよ!
あえて、サンプルは書きません、ご自分で調べてみてください。
質問者
補足
どうも有難うございました。
無事走らせることはできたのですが、フォーム上にオブジェクトを作って、出力の値をテキストボックスに表示したいと思うのですが、うまく表示されません(スクロールバーの使い方もよく分かりません)。また、テキストファイルに出力する場合、ファイルをオープンしてからPrint文で出力する方法がうまくいきません(入力と同様にファイルを開いてそのファイルに書きこむとエラーがでる)。ヘルプを見てもテキストファイルにどうやって出力したらよいか分かりません。どうか出力方法を教えてください。
よろしくお願いします。
以下のプログラムでは出力がフォームに表示され値が重なり読み取ることができません。
Private Sub Command1_Click()
step = 0.25
ramda = 0.5
Open "C:\hosei1.txt" For Input As #1
Dim RecCnt As Integer
Dim Data(1 To 400)
RecCnt = 1
Do While Not EOF(1)
If (RecCnt > 401) Then
Exit Do
End If
Input #1, Data(RecCnt)
RecCnt = RecCnt + 1
Loop
surface = 1
l = 400
Do While surface < l
g = 0
h = 0
i = surface
Do While i < l
h = h + (Data(i + 1) * Exp(-((i - surface + 1) * step) / ramda) + g) * step / 2
g = Data(i + 1) * Exp(-((i - surface + 1) * step) / ramda)
z = CSng(h / ramda * (1 - Exp(-(step * (l - surface) / ramda))))
i = i + 1
Print CSng(z)
Loop
surface = surface + 1
Loop
End Sub
お礼
MultiLineだったんですね(^。^)。Falseになっていました。だからスクロールバーが表示されなかったんですね。それとファンクションキーは結構役に立つんですね。どうも有難うございました。分かりやすい説明大変感謝いたします。 今回のプログラムでVBは面白いなーって実感しました。これからいろいろ勉強したいと思います。