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;

发生的情况是下一个转换工具将“Saltlake”的 AZIMUT 值误认为其 Z 位置,因为在 input.txt 的 POSITION 中的 y 值之后没有给出输入 - 与“Oak”不同。

现在,是否可以用“0”替换缺少的 Z 输入空间,当然,如果给出 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

我添加了一行来完成这项工作。我使用-split运算符检查 POSITION 中有多少部分(通过在 separator 上拆分;)。如果等于二,则意味着必须添加零,否则不添加。

$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 回答