2015-12-23 192 views
1

我有一個csv,其中有些地址的行有一些有數字,有些沒有。我一直在使用powershell來嘗試將列分成兩部分。一個用於地址,另一個用於公寓。 所以最初的列看起來像這樣。將csv列拆分爲兩列(powershell)

839 Main St Apt 3 
130 Marcy Ave 
399 Broadway Ave Apt 6F 

我在尋找

地址欄

839 Main St     
130 Marcy Ave 
399 Broadway Ave    

公寓列

公寓3 空白 公寓6F

結果

我想看看我將如何能夠分裂這一點。如果我使用空格作爲分隔符,那麼它會將adderess列分成多個列。例如,如果我使用字母A,那麼生病時會留下pf 6F。解決這個問題的正確方法是什麼?

任何幫助將不勝感激。

+0

髒數據總是一個問題。如果總是使用'​​Apt'縮寫,那麼你可以分開。 – EBGreen

+0

這就是我的想法。有沒有辦法根據這個詞分割它,並保持它?我正在考慮附加丟失的字母,如果我使用拆分功能,但不是每行都有APT。在Excel中,我會使用搜索和替換附加〜APT的infront,然後使用文本到列並使用〜作爲分隔符。我不知道如何通過PowerShell去做這件事。 – User125

+0

是的,您需要拆分單詞(包括它周圍的空格)並將Apt添加回拆分後的第二個位。你也需要使用一些邏輯來處理沒有它的行。 – EBGreen

回答

2

您可以使用此:

$aptReg=[regex]'^(.*)(Apt.*)$' 
"839 Main St Apt 3","130 Marcy Ave","399 Broadway Ave Apt 6F" | % {if($aptReg.IsMatch($_)){$a=$aptReg.Matches($_);[PSCustomObject]@{"A1"=$a.Groups[1].Value;"A2"=$a.Groups[2].Value}}else{[PSCustomObject]@{"A1"=$_;"A2"=""}}} 

它提供:

A1      A2                                
--      --                                
839 Main St   Apt 3                               
130 Marcy Ave                                                              
399 Broadway Ave  Apt 6F 

鑑於以下CSV文件:

"Name","Surname","Address","Zipcode" 
"N1","S1","839 Main St Apt 3","Z1" 
"N2","S2","130 Marcy Ave","Z2" 
"N2","S2","399 Broadway Ave Apt 6F","Z2" 

很長的一個襯墊...

Import-Csv C:\ Temp \ test.csv | %{if($ aptReg.IsMatch($ .Address)){$ a = $ aptReg.Matches($ .address); $ a1 = $ a.Groups [1] .Value; $ a2 = $ a.Groups [2] .Value} else {$ a1 = $ .address; $ a2 =「」}; Add-Member -InputObject $ -MemberType NoteProperty -Name「A1」-Value $ a1; Add-Member -InputObject $ _ -MemberType NoteProperty - 名稱「A2」 - 值$ a2; $ _} | Export-Csv「C:\ Temp \ test Bis.csv」

+0

太棒了!謝謝!。這正是我所期待的。現在我對powershell非常陌生,所以我還有另外一個問題。我使用Import-CSV和其他列來從csv中獲取信息。所以我想弄清楚如何修改這個以適應這種情況。我假設我們在這裏手動列出地址,我將載入我的數據並在初始地址欄中運行$ aptReg。這將填充兩個新的列A1和A2(在我的情況下,地址和公寓) – User125

+0

你必須使用Add-Member cmdlet來添加結果。我編輯我的答案。 – JPBlanc

+0

因此,它確實爲第一行做了假設。接下來的行它不解析地址,但追加@ {地址=完整的地址; A1 =; A2 =}在A1列 – User125