0

何百もの次の行 (オブジェクト) を含む GIS 入力ファイルがあります。

{
    POSITION="[950.28174, 797.89899]";
    TYPE="Saltlake";
    AZIMUT="-25.722504";
    PARENT="";
};

    {
    POSITION="[900.71307, 777.2226, -3.8146973]";
    TYPE="Oak";
    AZIMUT="-168.15758";
    PARENT="";
};

POSITIONは、長さ、幅、高さ [x,y,z] を意味します。現在、次のツールの入力を変換するために、この powershell スクリプトを使用しています。

$d=gc input.txt   
$rows=@()   
for ($i=0; $i -le $d.count -2; ++$i) {                                          
if( $d[$i] -match "POSITION" ) { 
 $pos = $d[$i].Replace('POSITION="[', '').Replace(',',';').Replace(']";','').Replace(' ', '').trim()  
 $typ = $d[$i+1].Replace('TYPE=', '').Replace(';', '').Replace(' ', '').trim() 
 $ori = $d[$i+2].Replace('AZIMUT="', '').Replace('"', '').Replace('PARENT=;', '').Replace(' ', '').trim() 
 $rows += $("{0};{1};{2}" -f $typ,$pos,$ori)            
} 
}

sc -path output.csv -value $rows

output.txt は次のようになります。

"Saltlake";950.28174;797.89899;-25.722504;
"Oak";900.71307;777.2226;-3.8146973e-006;-168.15758;

次の変換ツールは、"Oak" とは異なり、input.txt の POSITION の y 値の後に入力が与えられていないため、"Saltlake" の AZIMUT 値をその Z 位置と間違えます。

さて、不足している Z 入力スペースを「0」に置き換えることは可能ですか?もちろん、Z 位置が指定されている場合は置き換えないでください。

目的は、output.txt を次のようにすることです。

 "Saltlake";950.28174;797.89899;0;-25.722504;
 "Oak";900.71307;777.2226;-3.8146973e-006;-168.15758;
4

1 に答える 1

1

これを機能させるために1行追加しました。オペレーターを使用して-split、POSITION にいくつのパーツがあるかを確認します (セパレーターで分割することにより;)。それが 2 に等しい場合は、ゼロを追加する必要があることを意味し、それ以外の場合は追加しないことを意味します。

$d=gc .\tmp.txt
$rows=@()   
for ($i=0; $i -le $d.count -2; ++$i) {                                          
    if( $d[$i] -match "POSITION" ) { 
        $pos = $d[$i].Replace('POSITION="[', '').Replace(',',';').Replace(']";','').Replace(' ', '').trim()
        if (($pos -split ';').count -eq 2) {$pos += ";0"}
        $typ = $d[$i+1].Replace('TYPE=', '').Replace(';', '').Replace(' ', '').trim() 
        $ori = $d[$i+2].Replace('AZIMUT="', '').Replace('"', '').Replace('PARENT=;', '').Replace(' ', '').trim() 
        $rows += $("{0};{1};{2}" -f $typ,$pos,$ori)            
    } 
}
$rows
于 2013-02-24T09:25:52.813 に答える