> こんにちは。
> VB使いの方がお出ましになり、VB愛好家としてはうれしい限り
> です。
ありがとうございます.
> VBは VB6なのかVB2010とか、どちらでしょうか?
いまだにVB6です.仕事用に使っているプログラムがVB2→VB3→VB6と大幅書き直ししたソフトで,機能もその時点で大きく変わっていますが,現時点でソースだけで610KB程度あり,VB2010とかに変更はとても無理そうなので,もうVB6と心中するしかありません.
VB2→VB3のときに,つい見かけに騙されて,含まれていたサードパーティの3Dコントロールで画面を作ってしまったので,VB3→VB4以降で3Dコントロールは無くなってしまい,そのままVB3を使わざるを得なかったわけです.
あるテキストデータから情報を分離してXY座標にZ値に応じて色分けし,半径をもう一つの値で変化させて円を描かせるソフトなのですが,画面以外にVectorデータとしてドロー系ソフトにインポートさせるために,PSまたはDXFファイルを書き出していましたが,VB6の頃には,PDFプリンタやAdbe以外のドローソフトもPDFのインポートができるようになったりして,プログラム上でPDFプリンタを指定してそこで書き出すようにしたり.これが,例のプログラムからプリンタの設定ができるよ,の実際に私がやった経験です.
また,データの方も,同種のいろんな異なるフォーマットのデータが入手できるようになって,その中には改行コードがCR+LF, CRのみ,LFのみと様々で,それそれに対応できる必要がありました.
そんな状況の変化の中で,意を決してVB6の時に前面書き直しをしたわけです.
いまさら,もうVB6の後継に書き直すのは無理です...
> この辺りのコードはどのようにされているのでしょうか?
メッセージを書いた時点までのプログラムは,VBと同様,ラベルやコマンドの後には" "(半角スペース)が来ることしか想定していなかったわけです.
で,実際にやってみたら,全角スペースが来る場合や";"が直接来る場合もあることがわかり,こりゃ対応が必要と思った訳です.
> Split 関数 で ; の前後で分ける...。
> 全角、半角の処理方法とか....。
現在,あれこれ考えて,以下のようにやってみています.現実的にはHAMLOGの方でエラーになるものも含まれているかもしれませんが.
Dim Labels(1000) As String
Dim NumLabels As Long
Private Sub Form1_Load()
ChkChr(0) = " "
ChkChr(1) = " "
ChkChr(2) = ";"
ChkChr(3) = ";"
ChkChr(4) = ":"
ChkChr(5) = ":"
ChkChr(6) = "*"
ChkChr(7) = "*"
NumChkChr = 7
・・・
と想定して,実際の変換のところで,;
ラベルの切り出し
Function AddList(Strings As Variant) As Long
a = Strings
List1.AddItem a
aa = Trim(a)
If Left(aa, 1) = "*" Then
aa = Right(aa, Len(aa) - 1)
For i = 0 To NumChkChr
n = InStr(aa, ChkChr(i))
If n > 0 Then
aa = Left(aa, n - 1)
End If
Next i
Labels(0, NumLabels) = aa
AddList = 1
Else
AddList = 0
End If
End Function
----------;
実際の変換
For i = 0 To NumLabels
newnum = "[*]" + Trim(Str(Val(Text2.Text) + i *
Val(Combo1.Text)))
For j = 0 To List1.ListCount - 1
a = List1.List(j)
If Left(a, 1) = "*" Then
a1 = a
For k = 0 To NumChkChr
cck = ChkChr(k)
n = InStr(a1, cck)
If n > 1 Then
a1 = Left(a1, n - 1)
End If
Next k
End If
If InStr(a1, "*") = 1 Then
If a1 = "*" + Labels(0, i) Then
For k = 0 To List1.ListCount - 1
lk = List1.List(k)
rp = Replace(lk, a1, newnum)
List1.List(k) = rp
Next k
End If
End If
Next j
Next i
-------
こんな感じです.
途中でラベルであることを示す文字を"*"から"[*]"に変換していますが,#Goto *2000 とか,すでに変換したラベルが変換対象にならないようにするためです.
上記の続きのファイルへ書き出し部分で,最後にreplace で"[*]"を"*"にもどしています.
> 全角スペースは半角スペースに Replace するとか...。
オリジナルに対してラベルだけを付け替える,という本来の目的から外れると思ったので,やってません.
ラベルに続く文字は,現時点では,上記の想定内の文字しか対応できていません.現実的かどうかはわかりませんが,すべての文字に対応した方が”きれい”だと思うので,現在の方法は止めて,実際に一文字ずつ判定して数字文字以外でお終いにするようにしようかと思っています
.
クロスレファレンスはそれ以降考えます.