2013-02-24 48 views
0

我有包含數百個以下的行(對象)一個GIS輸入文件中的「0」缺失的輸入數據:替換在輸出中CSV/TXT與Powershell的

{ 
    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 
[email protected]() 
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; 

什麼情況是,接下來的轉換工具的失誤AZIMUT值「Saltlake」表示它的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; 

回答

1

我加一條線,使這項工作。我使用-split操作員檢查POSITION中有多少個零件(通過拆分分離器;)。如果這等於2,則意味着零必須被添加,否則不是。

$d=gc .\tmp.txt 
[email protected]() 
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 
+0

非常感謝!這工作相當好! – user2094242 2013-02-24 10:24:43