Help us understand the problem. What is going on with this article?

WinMergeプラグイン(COBOL行頭番号無視)

More than 1 year has passed since last update.

仕事でCOBOLのソースコードを比較したい時があった。
先輩方はdiff等を使っていたが、個人的にWinMergeを使いたかったので作成。

COBOLは行頭に6桁の行番号を振ることが多く、WinMergeで普通に差分を取ると変更行以降すべてが差分になってしまう。この問題を解決するためにプラグインで行先頭6桁目までを除外するようにした。

IgnoreCobolLineNo.sct
<scriptlet>

<implements type="Automation" id="dispatcher">
    <property name="PluginEvent">
        <get/>
    </property>
    <property name="PluginDescription">
        <get/>
    </property>
    <property name="PluginFileFilters">
        <get/>
    </property>
    <property name="PluginIsAutomatic">
        <get/>
    </property>
    <method name="UnpackFile"/>
    <method name="PackFile"/>
</implements>

<script language="VBS">

Option Explicit

Function get_PluginEvent()
    get_PluginEvent = "FILE_PACK_UNPACK"
End Function

Function get_PluginDescription()
    get_PluginDescription = "COBOLソースコードの行番号を削除する(1-6桁目)"
End Function

Function get_PluginFileFilters()
    get_PluginFileFilters = "\.cbl$;\.ecb$"
End Function

Function get_PluginIsAutomatic()
    get_PluginIsAutomatic = True
End Function

Function UnpackFile(fileSrc, fileDst, pbChanged, pSubcode)
    Dim fso
    Dim foSrc
    Dim foDst

    Set fso = CreateObject("Scripting.FileSystemObject")

    '読み取り専用モード
    Set foSrc = fso.OpenTextFile(fileSrc, 1, True)
    '上書きモード
    Set foDst = fso.OpenTextFile(fileDst, 2, True)

    '1行づつ読み込む
    Dim srcLine
    Dim dstLine
    Do Until foSrc.AtEndOfStream
        srcLine = foSrc.ReadLine

        '行先頭の行番号(6桁)を削除する
        If Len(srcLine) - 6 <= 0 Then
            dstLine = ""
        Else
            dstLine = Right(srcLine, Len(srcLine) - 6)
        End If

        foDst.WriteLine(dstLine)
    Loop

    foSrc.Close
    foDst.Close

    Set foSrc = Nothing
    Set foDst = Nothing
    Set fso = Nothing

    pbChanged = True
    pSubcode = 0
    UnpackFile = True
End Function

Function PackFile(fileSrc, fileDst, pbChanged, pSubcode)
    PackFile = False
End Function

</script>
</scriptlet>
tak458
C#が割と好きなシステムエンジニア。 [学生]C#,C++,Fortran,PHP [仕事]Java,COBOL,javascript,Scala
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away