2021年9月24日金曜日

VBS VTOC データセット VOL&サイズ出力

 

#########################
入力 0_VTOC_DS一覧.txt
#########################

 
          TEST.AA.J1.S1.TEST1      VOL01
          TEST.AA.J2.S2.TEST2A     VOL02 +
          TEST.AA.J3.S3.TEST3AAA   VOL003
          TEST.AA.J4.S4.TEST4      VOL004+


          TEST.AA.J1.S1.TEST1         1   2   3
          TEST.AA.J2.S2.TEST2A       22 200   0
          TEST.AA.J3.S3.TEST3AAA    333  30  33
          TEST.AA.J4.S4.TEST4      4444  44  44


##########################
バッチ 0_VTOC_DS一覧.bat
##########################
setlocal enabledelayedexpansion
@echo off
cls
echo ---------------------------------------------
echo  VTOC データセット一覧(VOLとサイズ)を出力
echo ---------------------------------------------
echo %1
echo %~0
echo;
SET /P ANSWER="実行します。よろしいですか (y/n)?"
IF /i {%ANSWER%}=={y} (goto :yes)
IF /i {%ANSWER%}=={yes} (goto :yes)
EXIT
:yes
  IF EXIST %1_結果 DEL %1_結果
  cscript /nologo bin\1_VTOC_DS一覧分割.vbs %1
   IF %errorlevel% neq 0 (
      echo 異常終了 %errorlevel%
      exit /b 8
    )
   rem pause
   cscript /nologo bin\2_VTOC_DS一覧併合.vbs %1
   IF %errorlevel% neq 0 (
      echo 異常終了 %errorlevel%
      exit /b 8
    )
    echo 正常終了 %errorlevel%
 pause
    exit /b 0

endlocal

 
########################
結果_VTOC_DS一覧分割SIZ.csv
########################
TEST.AA.J1.S1.TEST1,1,2,3
TEST.AA.J2.S2.TEST2A,22,200,0
TEST.AA.J3.S3.TEST3AAA,333,30,33
TEST.AA.J4.S4.TEST4,4444,44,44
########################
結果_VTOC_DS一覧分割VOL.csv
########################
TEST.AA.J1.S1.TEST1,VOL01
TEST.AA.J2.S2.TEST2A,VOL02,+
TEST.AA.J3.S3.TEST3AAA,VOL003
TEST.AA.J4.S4.TEST4,VOL004,+


########################
0_VTOC_DS一覧.txt_結果.csv
########################
VOL01,,TEST.AA.J1.S1.TEST1,1,2,3
VOL02,+,TEST.AA.J2.S2.TEST2A,22,200,0
VOL003,,TEST.AA.J3.S3.TEST3AAA,333,30,33
VOL004,+,TEST.AA.J4.S4.TEST4,4444,44,44
 
########################
1_VTOC_DS一覧分割.vbs
########################

Option Explicit

Dim fso
Dim iFile1
Dim oFile1
Dim oFile2
'----------------------------------------
Dim Args
Dim sArg1
Dim sLine
Dim sOutLine
Dim OUTFNAME1
Dim OUTFNAME2
Dim LINEKEY
Dim lPosStr
'----------------------------------------
Set Args = WScript.Arguments
If Args.Count < 1 Then
  WScript.Echo "ドラッグ&ドロップしてを実行。"
  WScript.Quit(1)
End If
'WScript.Echo Args.Count
sArg1 =  Wscript.Arguments(0)
'OUTFNAME1 = sArg1 & "_結果VOL" & ".csv"
'OUTFNAME2 = sArg1 & "_結果SIZ" & ".csv"
'----------------------------------------
Set fso = WScript.CreateObject("Scripting.FileSystemObject")

OUTFNAME1 = fso.getParentFolderName(WScript.ScriptFullName) & "\" & "結果_VTOC_DS一覧分割VOL" & ".csv"
OUTFNAME2 = fso.getParentFolderName(WScript.ScriptFullName) & "\" & "結果_VTOC_DS一覧分割SIZ" & ".csv"
Set iFile1 = fso.OpenTextFile(sArg1, 1, False, 0)
Set oFile1 = fso.OpenTextFile(OUTFNAME1, 2, True)
Set oFile2 = fso.OpenTextFile(OUTFNAME2, 2, True)
LINEKEY = "TEST."
'----------------------------------------
Do Until iFile1.AtEndOfStream
  sLine = iFile1.ReadLine
' ---------------------------------------
  lPosStr = InStr(1, sLine, LINEKEY) 
  If lPosStr > 0 Then
    WScript.Echo sLine
    If mid(sLine,40,1) <> " " Then
'     ------------------------------------
'     VOLUME 情報の時
'     ------------------------------------
      sLine = Replace(sLine, "+", " +")
      sOutLine = OmmitSpaceAndCSV(trim(sLine))
      oFile1.WriteLine sOutLine
    Else
'     ------------------------------------
'     サイズ 情報の時
'     ------------------------------------
      sOutLine = OmmitSpaceAndCSV(trim(sLine))
      oFile2.WriteLine sOutLine
    End If
  End If
Loop
'----------------------------------------
iFile1.Close
oFile1.Close
oFile2.Close
WScript.Quit(0)    ' 終了する
'-------------------------------------------------
' 文字列操作:空白を詰めてカンマ区切りに編集する -
'-------------------------------------------------
Function OmmitSpaceAndCSV(p1)
      Dim a
      ' 2文字以上の空白を空白1文字にする
      While InStr(p1, "  ")
         p1 = Replace(p1, "  ", " ")
      Wend
     ' 空白区切りで配列保存
      a=Split(p1," ")
      OmmitSpaceAndCSV = Join(a, ",")
End Function



########################
2_VTOC_DS一覧併合.vbs
########################
Option Explicit
Dim fso
Dim iFile1
Dim iFile2
Dim oFile1
'----------------------------------------
Dim Args
Dim sArg1
Dim line1
Dim line2
Dim sOutLine
Dim INAME1
Dim INAME2
Dim sOName1
Dim i
Dim ilineNum
Dim aline1
Dim aline2
'----------------------------------------
Set Args = WScript.Arguments
If Args.Count < 1 Then
  WScript.Echo "ドラッグ&ドロップしてを実行。"
  WScript.Quit(1)
End If
'WScript.Echo Args.Count
sArg1 =  Wscript.Arguments(0)
sOName1 = sArg1 & "_結果.csv"
'----------------------------------------
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
INAME1 = fso.getParentFolderName(WScript.ScriptFullName) & "\" & "結果_VTOC_DS一覧分割VOL" & ".csv"
INAME2 = fso.getParentFolderName(WScript.ScriptFullName) & "\" & "結果_VTOC_DS一覧分割SIZ" & ".csv"
Set iFile1 = fso.OpenTextFile(INAME1)
Set iFile2 = fso.OpenTextFile(INAME2)
Set oFile1 = fso.OpenTextFile(sOName1, 2, True)
'----------------------------------------
While iFile1.AtEndOfLine = False
    ilineNum = iFile1.Line
    line1 = iFile1.readLine
    line2 = iFile2.readLine
    aline1 = split(line1, ",")
    aline2 = split(line2, ",")

    'WScript.Echo ilineNum & ",[VOL ]," & line1
    'WScript.Echo ilineNum & ",[SIZE]," & line2
    sOutLine = ""
    If aline1(0) = aline2(0) Then
      'ボリューム名
      sOutLine = sOutLine & aline1(1) & ","
      
      'マルチボリューム識別
      If UBound(aline1) >= 2 Then
        sOutLine = sOutLine & aline1(2) & ","
      Else
        sOutLine = sOutLine & "" & ","
      End if
      'データセット名
      sOutLine = sOutLine & aline1(0)
      'サイズ属性の情報
      For i=1 to UBound(aline2)
        sOutLine = sOutLine & "," & aline2(i)
      Next
      WScript.Echo sOutLine
      oFile1.WriteLine sOutLine
    Else
      WScript.Quit(8)
    End If
Wend
'----------------------------------------
iFile1.close
iFile2.close
oFile1.close
WScript.Quit(0)    ' 終了する