2014-04-03 54 views
0

我正在從SharePoint網站下載CSV。它附帶一個.csv文件擴展名。保存爲「正確的」csv /從CSV中刪除引號,除了逗號存在的位置

當我在記事本中打開它檢查文件的內容,我看到一個類似於此示例行數據:

"TITLE",OFFICE CODE,="","CUSTOMER'S NAME",ACCOUNT

我想要的數據是這樣的:

TITLE,OFFICE CODE,,"CUSTOMER'S NAME",ACCOUNT

解決此問題的一種方法是手動。當我在Excel中打開文件並保存它(不會改變任何內容)時,它會提示我以下內容:fileOrig.csv may contain features that are not compatible with CSV (Comma delimited). Do you want to keep the workbook in this format?當我保存它,然後在記事本中檢查它時,數據將根據我希望的樣子進行格式化。

有沒有一種快速的方法來保存原始CSV 與PowerShell

如果沒有快速方法使用PowerShell重新保存文件,我想使用PowerShell來解析它。

這些都是解析規則我想介紹:

  • 取下電池密封雙引號不包含,焦炭
  • 取出=焦炭

我試着寫一個測試只查看可能包含,字符的列的腳本。它應該找到不包含,字符的單元格,並刪除封裝文本的雙引號。這是行不通的,因爲我覺得它扔在Import-Csv

$source = 'I:\dir\fileOrig.csv' 
$dest = 'I:\dir\fileStaging.csv' 
$dest2 = 'I:\dir\fileFinal.csv' 

get-content $source | 
    select -Skip 1 | 
    set-content "$file-temp" 
move "$file-temp" $dest -Force 

$testcsv = Import-Csv $dest 

foreach($test in $testcsv) 
{ 
     #Write-Host $test."CUSTOMER NAME" 

     if($test."CUSTOMER NAME" -NotLike "*,*") { 
      $test."CUSTOMER NAME" -replace '"', '' 
     } 
} 

$testcsv | Export-Csv -path $dest2 -Force 

的雙引號是否有人可以幫助我要麼執行上面的邏輯,或者如果你知道一個更好的方式,將文件保存爲一個適當的CSV,你能讓我知道嗎?

回答

2

由於Excel可以處理這個問題,爲什麼不使用vb​​s腳本來自動化呢?從命令提示符

Set objExcel = CreateObject("Excel.Application") 
Set objWorkbook = objExcel.Workbooks.Open("C:\test\test.csv") 
objworkbook.Application.DisplayAlerts = False 
objworkbook.Save 
objexcel.quit 

運行它,它應該做的伎倆:用記事本創建「Fix.vbs」與以下行。

+0

工程就像一個魅力。我粘貼到Access VBA代碼。比你非常! –

2

我看到已經有一個被認可的答案,我只是提供一個替代方案。

如果你想保持它在PowerShell中,你可以這樣做:

$File = 'I:\dir\fileOrig.csv' 
$dest = 'I:\dir\fileStaging.csv' 
$Output = 'I:\dir\fileFinal.csv' 
$CSV = Import-Csv $file 
$Members = $test|gm -MemberType Properties|select -ExpandProperty name 
$test|%{$row=$_;$Members|%{if(!($row.$_ -match "\w+")){$row.$_=$null}};$_=$row}|export-csv $dest -NoTypeInformation -Force 
gc $file|%{($_.split(",") -replace "^`"(.*)`"$","`$1") -join ","}|Out-File $Output 

一個導入CSV,可以確保有字(字母,數字和/或下劃線......不問我爲什麼下劃線被認爲是單詞,RegEx要求它是這樣!)在每個項目的每個屬性中,導出CSV,然後再次運行該文件,只是以逗號分隔文本,如果它顯示在雙引號中,那些,重新加入該行,然後將其輸出到文件。我不認爲唯一出現在OP中的「首選輸出」是"CUSTOMER'S NAME"而不是CUSTOMER'S NAME

+0

+1謝謝你。我將測試兩者並決定是否以這種方式實施。 –