HAMLOG開発室は、HAMLOGに関連したプログラム開発(C、パスカル、VB言語等、又はDLL)についての
専用BBSです。プログラム言語に関する投稿以外は通常のHAMLOG相談室に投稿して下さい。
HAMLOG開発室BBS

> こんにちは。
> 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 するとか...。

 オリジナルに対してラベルだけを付け替える,という本来の目的から外れると思ったので,やってません.

 ラベルに続く文字は,現時点では,上記の想定内の文字しか対応できていません.現実的かどうかはわかりませんが,すべての文字に対応した方が”きれい”だと思うので,現在の方法は止めて,実際に一文字ずつ判定して数字文字以外でお終いにするようにしようかと思っています


クロスレファレンスはそれ以降考えます.

2014/02/21(Fri) 13:31:15  [No.424]


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)
- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)
Call 名前 ※必須
文字色
Eメール
タイトル sage
URL
メッセージ 手動改行 強制改行 図表モード
メッセージには上記と同じURLを書き込まないで下さい
画像File  (130kBまで)
暗証キー (英数字で8文字以内)
投稿キー (投稿時 投稿キー を入力してください)
プレビュー