【问题标题】:PowerShell change datatypes of the Data.DataTable objectPowerShell 更改 Data.DataTable 对象的数据类型
【发布时间】:2015-04-16 14:50:14
【问题描述】:

我正在编写一个脚本,该脚本使用 .csv 文件中的数据创建 Data.DataTable。一切正常,我的数据库中有正确的值。但是为了提高我的数据库性能,我想为Data.DataTable 的列设置数据类型。不幸的是,我的所有值都从 CSV 转换为字符串到 Data.DataTable 列。

我的 CSV 看起来像这样(示例):

"Name";"UserID";"Salary"
"Peter";"1";"1200.03"
"Jennifer";"2";"1000.50"

我尝试了以下方法:

foreach ($object in $csv){
    Write-Output "line $countline"

    foreach($property in $object.PsObject.get_properties()) 
        {   
        $property.TypeNameOfValue = [System.Type]::'System.Int32'

          ***and the other try*** 

        $property.Value = [System.Type]::'System.Int32'
        }
    }

两次都没有发生(除了错误)。

所以我希望发生以下情况:第一列应该是字符串(“名称”)的数据类型。其他的应该是 double 或 float。

有人对此有解决方案吗?

【问题讨论】:

    标签: powershell csv datatable


    【解决方案1】:

    有几种方法可以解决这个难题。我会说,Import-CSV 如果你想使用字符串以外的任何东西,会有一些限制,但它可以做到。

    方法一:Hash Tables

    $data = import-csv .\data.csv -Delimiter ';'
    $hashtable = [ordered]@{"Name" = ($data).name; "UserID" = ($data).UserID.ToDouble($_); "Salary" = ($data).Salary.ToDouble($_)}
    

    示例输出:

    PS C:\> $hashtable.Name
    Peter
    Jennifer
    PS C:\> $hashtable.Name | GM
    TypeName: System.String
    PS C:\> $hashtable.UserID
    1
    2
    PS C:\> $hashtable.UserID | GM
    TypeName: System.Double
    

    方法二:CSV Files with Type Information

    这种方法更容易使用我习惯使用的传统方式Import-Csv,但我无法将结果组合成单个变量。不是世界末日,还需要做更多的工作来制作更多的 CSV 文件并弄清楚如何将类型应用于它们。

    CSV 文件示例:

    #TYPE System.String
    "Name"
    "Peter"
    "Jennifer"
    

    #TYPE System.Double
    "UserID";"Salary"
    "1";"1200.03"
    "2";"1000.50"
    

    使用Import-Csv的示例结果:

    PS C:\> Import-Csv .\double.csv -Delimiter ';'
    UserID Salary
    ------ ------
    1      1200.03
    2      1000.50
    PS C:\> Import-Csv .\double.csv -Delimiter ';' | GM
    TypeName: CSV:System.Double
    

    可选方法:如果您有勇气,请在此处为Import-Csv 编写代理脚本的人:Importing typed objects with typed properties from a CSV file,但我自己没有测试。我之所以提到它,是因为如果它经常出现,它看起来是处理这个问题的好方法。

    我发现这篇关于如何处理一些quirks of hash tables 的文章很有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-04
      • 1970-01-01
      • 1970-01-01
      • 2016-07-31
      • 1970-01-01
      • 1970-01-01
      • 2016-04-15
      • 1970-01-01
      相关资源
      最近更新 更多