2014-06-19 53 views
0

我最近更改了腳本以將數據從csv文件導入選項卡分隔文件。我遇到的問題是當tab分隔的文件中有一個空值,例如$ var1時,它不會將$ var當作NULL或「」,我認爲變量中存在一個製表符,因此我將條帶從包含選項卡變量,仍然發生相同的問題。選項卡分隔的文件包含6列和5行,並且在使用以下命令導入文件時添加標題。PowerShell選項卡分隔文件導入和空白值

我的問題是如果其中一列是空白的話,將從標籤分隔的文件中讀取什麼?

 The command used to import the files contents. 
     $List = Import-Csv C:\Users\jsmith\Documents\file.out -Delimiter "`t" -Header "ID","Date","First Name","Last Name","Gender" 
+0

我無法重現你的錯誤。當我用樣本數據嘗試時,缺失值是一個空字符串: 1 \ t 6/10/2014 \ t John \ t Doe \ t M \ t X 2 \ t 6/01/2014 \ t Frank \ t O'Connor \ t M \ t X $ 3 \ t 4/10/2012 \ t Fred \ t \ t M \ t X $ List [2]。'Last Name'GetType()returned System。字符串和 $ List [2]。'Last Name'.Length返回0 – JamesQMurphy

+0

我收到不同變量的不同結果。當一個變量的$ var.length返回值爲0.當另一個$ var1.length時,我沒有收到任何回報。當我$ var.gettype()它顯示爲一個字符串,但是當我$ var1.gettype()我收到錯誤'你不能調用一個空值表達式的方法。從標籤分隔文件導入後,這兩個變量都是空的。 – user3175140

+0

我已經把它分解如下,我用我原來的帖子使用不同的標題名稱; $ List = Import-Csv C:\ Users \ jsmith \ Documents \ file.out -Delimiter「t」-Header「ID」,「Date」,「First Name」,「Mid。Name」,「postOfficeBox」 的ForEach($在$列表記錄){$ = middleName_file_value $記錄。 「中秋節。名稱」 \t $ middleName_file_value \t $ POBox_file_value = $ record.postOfficeBox \t $ POBox_file_value \t} – user3175140

回答

1

嘗試評估[System.DBNull]::Value

我通常把它分配給一個變量,以方便以後評價:

$DBnull = [System.DBNull]::Value 
if ($value -eq $DBNull) { 
    # Do stuff 
    } 
+0

評估爲[System.DBNull] ::價值是答案,我本來是評估$ NULL,並沒有解決問題,但是[System.DBNull] ::值:) :)兩者之間有什麼區別。 – user3175140

+0

這可能有助於解釋一點:http://stackoverflow.com/questions/4958379/what-is-the-difference-between-null-and-system-dbnull-value –

+0

謝謝你的信息,這有回答了我的問題。 – user3175140

相關問題