Option Explicit ' Audit1.vbs, ver 1.0, Rick G. ' NWC2 UserTool to restore some accidentals after audit ' &Command: WScript Scripts\Audit1.vbs Dim d: Set d = CreateObject("Scripting.Dictionary") Dim a1, a2, e, i, n, s, s1 Dim aIn: aIn = Split(WScript.StdIn.ReadAll, vbCrLf) For i = 1 To UBound(aIn) - 2 a1 = Split(aIn(i), "|") Select Case a1(1) Case "Note", "Chord", "RestChord" If UBound(Filter(a1, "Visibility:Never")) > -1 Then For Each e In Filter(a1, "Pos") For Each s In Split(Split(e, ":")(1), ",") a2 = aPos5(s) If Len(a2(0)) Then d(a2(1)) = a2(0) Next Next Else For n = 3 To UBound(a1) e = a1(n) If Left(e, 3) = "Pos" Then For Each s In Split(Split(e, ":")(1), ",") a2 = aPos5(s) If d.Exists(a2(1)) Then a2(0) = d(a2(1)): d.Remove a2(1) s1 = s1 & "," & Join(a2, "") Next a1(n) = Split(e, ":")(0) & ":" & Mid(s1, 2): s1 = "" End If Next aIn(i) = Join(a1, "|") End If Case "Bar" d.RemoveAll End Select Next WScript.Stdout.Write Join(aIn, vbCrLf) Function aPos5(ByVal s) ' NotePos to array Dim r(4), e ' retval, element If InStr("nb#xv", Left(s, 1)) Then r(0) = Left(s, 1) ' accidental If InStr(s, "^") Then r(3) = "^" ' tie If InStr(s, "!") Then r(4) = Mid(s, InStr(s, "!"), 2) ' color For Each e In r: s = Replace(s, e, "", 1, 1): Next If Not IsNumeric(s) Then r(2) = Right(s, 1) ' notehead r(1) = Replace(s, r(2), "") aPos5 = r ' acc, pos, head, tie, color End Function