0

パターンのテキスト文字列を調べて、それを別のものに置き換える方法について、インターネット全体から情報を収集してきました。

アプリケーションのニーズに最も合っていると思うので、RegEx とその利用方法について学び始めたところです。基本的に私がする必要があるのは、テキスト ファイルから読み取った文字列を確認することです。このファイルには最大 3 つの ZPL II ラベル定義が含まれている可能性があり、一部のコマンド/パラメーターを置き換えてから、すべてのデータをワイヤレス ラベル プリンターに渡します。

たとえば、メディア濃度コマンド ^MDxx を見つける必要があります。ここで、xx は、印刷されるラベルの濃度を設定する整数です。xx は、負、正、および最大 2 桁であるとは限りません (範囲は -30 から 30 です)。したがって、特定の ^MD コマンドは 4 から 7 文字にすることができ、一度に処理するラベル定義ごとに異なる可能性があります。これら 3 つのコマンドすべてを ^MD-13 に置き換える必要があります。

これは私の研究に基づいて思いついたコードであり、私が何か間違ったことをしていないか、または調整が必要かどうかを知りたいと思っています.

Public Function ProcessLabelString(strInput As String) As String
    Dim strZPL As String = strInput

    Try
        Dim lstPatterns As New Dictionary(Of String, String)
        'media tracking ^MNa,b - look for ^MN followed by a single letter, and optionally a comma followed by another letter
        lstPatterns.Add("\^MN[A-Za-z](\,[A-Za-z])?", "")
        'media darkness ^MDa - look for ^MD followed by an optional dash (for negative value) and up to two digits (valid values are -30 to 30)
        lstPatterns.Add("\^MD\-?\d{1,2}", "^MD-13")
        'label home ^LHx,y - look for ^LH followed by up to a five digit number, a comma, and another number up to five digits (valid values are 0 to 32000)
        lstPatterns.Add("\^LH\d{1,5},\d{1,5}", "^LH5,0")
        'print rate ^PRa,b,c - look for ^PR followed by up to two letters/numbers, and two optional sets of a comma with up to two letters/numbers (valid values for all three parameters are A-E or 1-14)
        lstPatterns.Add("\^PR[A-Ea-e0-9]{1,2}(\,[A-Ea-e0-9]{1,2})?(\,[A-Ea-e0-9]{1,2})?", "^PR2")
        Dim regExp As System.Text.RegularExpressions.Regex

        For Each pattern In lstPatterns
            regExp = New System.Text.RegularExpressions.Regex(pattern.Key)
            strZPL = regExp.Replace(strZPL, pattern.Value)
        Next
    Catch ex As Exception
        MsgBox(ex.ToString)
    End Try

    Return strZPL
End Function

ここで、strInput パラメーターは、ZPL II ファイルの内容を含む文字列です (したがって、1 ~ 3 個のラベルを含むことができます)。コマンドが常にそこにあることは知っていますが、使用しているワイヤレス プリンターの設定が正しくないだけです。

編集: 以下は、このロジックで処理される可能性のある ZPL ファイルのサンプルです。通常はもっと多くの ^FO コマンドがありますが、機密情報が含まれているため、一部のコマンドをコピーして置き換えました (テキスト値が異なるだけで、すべて同じようなコマンドです)。

~JO
^XA^EG^XZ
^XA
^PMN
^MNY                             'need to find this
^MMT
^MTD
^MD20                            'need to find this
^LH10,10                         'need to find this
^LL1119
^PR6                             'need to find this
^JMA
^FO2,492^FR^GB785,2,2^FS
^FO8,725^FR^GB785,12,12^FS
^FO8,864^FR^GB785,2,2^FS
^FO8,1091^FR^GB785,12,12^FS
^FO275,492^FR^GB2,232,2^FS
^FO51,51^CI0^A0N,26,22^FR^FDCustomerName^FS
^FO51,81^CI0^A0N,26,26^FR^FDCompanyName^FS
^FO51,111^^CI0^A0N,26,26^FR^FDPhoneNumber^FS
^FO51,142^CI0^A0N,26,26^FR^FDAddress^FS
^FO51,173^CI0^A0N,26,26^FR^FDCityStateZip^FS
^PQ1
^XZ
~JO
^XA^EG^XZ
^XA
^PMN
^MNY                             'need to find this
^MMT
^MTD
^MD30                            'need to find this
^LH0,0                           'need to find this
^LL1219 
^PR6                             'need to find this
^JMA
^FO341,51^FR^GB2,195,2^FS
^FO51,248^FR^GB709,2,2^FS
^FO61,1172^FR^GB709,2,2^FS
^FO467,250^FR^GB2,171,2^FS
^FO61,538^FR^GB709,2,2^FS
^FO508,538^FR^GB2,293,2^FS
^FO61,417^FR^GB709,2,2^FS
^FO61,831^FR^GB709,2,2^FS
^FO51,51^CI0^A0N,26,22^FR^FDCustomerName^FS
^FO51,81^CI0^A0N,26,26^FR^FDCompanyName^FS
^FO51,111^^CI0^A0N,26,26^FR^FDPhoneNumber^FS
^FO51,142^CI0^A0N,26,26^FR^FDAddress^FS
^FO51,173^CI0^A0N,26,26^FR^FDCityStateZip^FS
^PQ1
^XZ
4

0 に答える 0