はじめまして.
早速ですが,配列をstring型で宣言して,それを
ファイルに書き出すということをやっているのですが,
dim a() as string
dim b as variant
b=a()
print #1, b
というプログラムであっているでしょうか?
よろしくお願いいたします.
> 早速ですが,配列をstring型で宣言して,それを
> ファイルに書き出すということをやっているのですが,
その配列データを、どのようなテキストとして出力したいのでしょうか?
>魔界の仮面弁士様
返信ありがとうございます。
100個ほどの要素のデータを1個ずつ改行して、
1列100行のようなテキストとして、出力したいのです。
「型が一致しません」というエラーがどうしても出てきて、
うまくいかないのですが、これは宣言の仕方が間違っているのでしょうか?
[VB6.0]
配列を出力するには、各要素を個々に出力するループを作成します。
…と[型が一致しません。(Error 13)]のヘルプに書いてあって爆笑w。
ヘルプって面白いにぁ。
返信ありがとうございます。
どうしてもうまくいかないので、プログラムをのせて見ます。
アドバイス頂けると、うれしいです。
Private Sub ReceiveComm_OnComm()
Dim varBuffer As String
Dim strdata1 As Variant
Static Ffrag, PictureFrag As Boolean
'シリアルポートのイベントプロパティに対する処理
Select Case ReceiveComm.CommEvent
'イベントメッセージ
Case comEvCD
Case comEvCTS
Case comEvDSR
Case comEvRing
Case comEvReceive
'受信データの取得
varBuffer = ReceiveComm.Input
strData = strData & varBuffer
'バッファの右端の文字列にターミネータがある場合
If Right(varBuffer, 1) = TransDialog.strLastChar Then
If TransDialog.strTerminate = "CR" Or TransDialog.strTerminate = "LF" Then
'ターミネータ文字が"CR"や"LF"なら一文字分抜き取る
strData = Left(strData, Len(strData) - 1)
Else
'二重のターミネータなら二文字分を抜き取る
strData = Left(strData, Len(strData) - 2)
End If
If InStr(strData, "START!") <> 0 Then
'START信号を受信したらログファイルとデータファイルを作成し開けておく
If fopen = False Then
fopen = OpenFile(SaveFileTxt, DirList.path, FileTypeComb)
Call SaveLogFile("Recieves start")
End If
'送信側にデータの要求を求める
ReceiveComm.Output = "DATA?" & TransDialog.strTerminator
'ファイルフラグを挙げる
Ffrag = True
'描画フラグを挙げる
PictureFrag = True
'バッファデータを初期化
strData = ""
varBuffer = ""
'パラメータの表示
Trans_Status.Caption = "通信開始"
TimeText.Text = TimeText.Text & "Transmit Start" & Format(Now, "hh:mm:ss") & vbCrLf
End If
strdata1 = Split(strData, vbCr)’strDataをCRで区切って配列に格納
'通信路が切断した時(何故か上手くいかない→要デバッグ!)
If InStr(strData, "NO CARRER") <> 0 Then
'切断のパラメータを表示
Trans_Status.Caption = "通信中断"
TimeText.Text = TimeText.Text & "Transmit Stopped" & Format(Now, "hh:mm:ss") & vbCrLf
'ログ記録
Call SaveLogFile("Interrupts")
End If
'ファイルフラグが上がっている間データのセーブ
If Ffrag = True Then
Call SaveFile(strdata1, 0)
End If
で、SaveFileっていうのが、
'データのセーブ用関数
Public Function SaveFile(Data As Variant, channelNO As Long)
Dim temp(8) As Variant
Dim time As Long
time = Second(Now)
If OpenFrag = True Then
'データの格納
temp(channelNO) = Data
'セーブ
Print #1, temp(channelNO)
End If
End Function
strdataが一つの文字列に何個もデータがひっついてくるので、それを一個一個のデータにしてから、ファイルに書き出したいのです。
しかし、セーブのところでエラーが出てしまいます。
無視かよっ(>△<)ノ!!
全然コードとして変わってないやん。
不必要な情報が増えた分、質問としてはレベルダウンしたねぇ。
>配列を出力するには、各要素を個々に出力するループを作成します。
各要素を、1個1個、出力する、ループ処理を、コーディング、して下さい!!!
配列は出力できません。
配列のかたまりのまま保存したいなら、Put ステートメントを使います。
この場合、データはテキストではなくバイナリ形式で保存されます。
(読込には、Getステートメントを使うことになります)
配列を改行区切りで保存したいなら、Join関数を使って、
文字列の配列を、改行区切りの長い文字列にしてから、
Printステートメントで保存すればOKです。
返信ありがとうございます.
ループの形でやってみたのですが,tの値がなぜか0のままで増えていきません.コードはこのように変えました.
static t as integer
For t = LBound(strdata1) To UBound(strdata1)
t = t + 1
'ファイルフラグが上がっている間データのセーブ
If Ffrag = True Then
Call SaveFile(strdata1(t), 0)
End If
Next t
どこか,おかしいでしょうか?
そもそも OnCommイベントプロシージャが長すぎるので、MsCommに依存する部分と、受信データの処理のルールに依存する部分を分離するべきだと思いますが、それはちょっと置いておいて
> static t as integer
staticにする必要性が全く感じられません。
> t - t + 1
Forループのカウンタを毎回自分で書き換えるようなコードは、
「そもそもForではなく Do や while等のループにするべき」
「バグ」
のどちらかの場合がほとんどです。
今回はこれまでの話の感じではバグの可能性の方が高いです。
ツイート | ![]() |