0

より管理しやすい組織 (できれば 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%
}
4

2 に答える 2