より管理しやすい組織 (できれば csv) に移行したい古い DCS システムのデータ ポイントのリストがあります。各エントリタイプを独自の列にしたいと思います。最後に、変更されたcsvファイルを元の形式に変換したいと思います。これはエントリのいくつかの例です:
{SYSTEM ENTITY 95UA114( ) }
&T DIGINHG
&N 95UA114
UNIT = FD
PTDESC ="95C-101 COMPRESSOR S/D "
KEYWORD ="C101 S/D"
PRIMMOD = HPFD01G
ASSOCDSP ="HPFD01~1"
$CDETAIL =" "
HWYNUM = 08
PNTBOXTY = DHP
BOXNUM = 8
PTDISCL = FULL
LOADDEST = HG_HIWAY
SLOTNUM = 12
INPTSSLT = 10
NMBRINPT = 1
$AUXUNIT = --
$REALARM = 0
DIGALFMT = STATE2
DLYTIME = 0
CHOFSTPR = NOACTION
CNFERRPR = EMERGNCY
OFFNRMPR = EMERGNCY
CRITSCAN = OFF
CCRANK = NEITHER
EIPPCODE = --
EIPEVENT = ANY
EIPENB = ENABLE
ALENBST = ENABLE
STATE2 ="S/D_BYP "
STATE1 ="NORMAL "
UBOXCLR = RED
LBOXCLR = GREEN
OVERVAL = ON
INPTDIR = DIRECT
PNTBOXIN = 1
PNTPCTY = MODICON
PCADDRI1 = 2097
SPECIFI1 = 1
情報が冗長であるため、最初の行 (システム エンティティ) は必要ありません。ただし、列 (Unit、ptdesc) は常に同じとは限りません。これを行うためにオートホットキーを使用することを計画していましたが、誰かがより良い提案を持っているなら、私はすべて耳にします。現在、ファイルを読み取り、各エンティティを分離し、各行を分割して=
各列の値を決定するコードがありますが、それらを並べるのは難しいことがわかりました。それを処理するために私が考えることができる唯一の方法は、2次元配列を使用することですが、書くのは面倒です。より良い/より効率的な方法があると確信しています(ファイルは約21k行/500エンティティ)。
numEntries = 0
AutoTrim, Off
outFile = test.csv
filedelete, %outfile%
filereadline, columns, columns.txt, 1
fileappend, TAG`,NAME`,%columns%`r`n, %outfile%
stringsplit, columns, columns,`,
numcolumns=%columns0%
msgbox %numcolumns%
Loop, Read, H3ALL.EB
{
ifinstring, A_LoopReadLine,=
{
i++
data%i%=%A_LoopReadLine%
continue
}
ifinstring, A_LoopReadLine,SYSTEM ENTITY
{
numEntries+=1
if(numEntries > 1)
{
fileappend,`r`n,%outfile%
Loop %i%
{
element := data%A_Index%
stringsplit, element, element,=
Loop %numcolumns%
{
test1=%element1%
test2:=columns%A_Index%
if (test1=test2)
{
;add to correct column
}
}
}
data=
i=0
}
continue
}
ifinstring, A_LoopReadLine,&T
{
stringsplit, line, A_LoopReadLine,%A_SPACE%
tag=%line2%
fileappend,%tag%`,,%outfile%
;msgbox the tag is %tag%
continue
}
ifinstring, A_LoopReadLine,&N
{
stringsplit, line, A_LoopReadLIne,%A_SPACE%
name=%line2%
fileappend,%name%`,, %outfile%
;msgbox the name is %name%
continue
}
}
msgbox DONE!
作業コード:
i=0
j=0
outFile = test.csv
filedelete, %outfile%
AutoTrim, off
filereadline, columns, columns.txt, 1
fileappend,%columns%`r`n,%outfile%
stringsplit, columns, columns,`,
numColumns=%columns0%
Loop, Read, H3ALL.EB
{
ifinstring, A_LoopReadLine,=
{
i++
stringsplit, line, A_LoopReadLine,=
loop %numColumns% {
test1:=columns%A_Index%
test2=%line1%
if(test1=test2) {
dataArray%A_Index%_%j%=%line2%
;msgbox column %test1% (%A_Index%) contains %line2%
}
}
continue
}
ifinstring, A_LoopReadLine,SYSTEM ENTITY
{
j++
i=0
continue
}
ifinstring, A_LoopReadLine,&T
{
i++
stringsplit, line, A_LoopReadLine,%A_SPACE%
dataArray%i%_%j%=%line2%
continue
}
ifinstring, A_LoopReadLine,&N
{
i++
stringsplit, line, A_LoopReadLIne,%A_SPACE%
dataArray%i%_%j%=%line2%
continue
}
}
outerIndex=0
Loop %j% {
outerIndex++
Loop %numColumns% {
cell:=dataArray%A_Index%_%outerIndex%
fileappend,%cell%`,,%outfile%
}
fileappend,`r`n,%outfile%
}