【问题标题】:How to import first two values for each line in CSV file | PowerShell如何为 CSV 文件中的每一行导入前两个值 |电源外壳
【发布时间】:2018-08-06 18:52:17
【问题描述】:

我有一个每天生成的 CSV 文件,生成的数据如下:

windows:NT:v:n:n:d:n:n:n:n:m:n:n

我还应该提到,该示例是 3,900 多行之一,并非每一行数据都具有相同数量的“列”。我想要做的只是将数据的前两个“列”导入到变量中。对于这个例子,它应该是“Windows”和“NT”,没有别的。

我该怎么做呢?我试过使用 -delimiter ':',但运气不佳。

【问题讨论】:

  • 您要在同一个变量中导入 3900 多行的两列?您打算使用什么类型的变量,因为这会使问题更清楚?
  • 也许变量是一个错误的词选择。我只是想上传它,这样我就可以在下一行的“ForEach”中使用它。老实说,让它发挥作用所需的一切
  • 您甚至可以将它包含在 foreach 中,这样您就可以在每个循环中读取一行,具体取决于您是否需要为每一行执行 foreach
  • 你可以试试 for 循环。在循环中用“:”分割行,然后只调用前两个索引开始制作变量

标签: powershell csv search powershell-ise


【解决方案1】:

行数无关紧要。

我的评论方法(对您之前的问题)应该有效,
如果没有标题并且您只想要前两列,
只需指定 Header 1,2

> import-csv .\strange.csv -delim ':' -Header (1..2) |Where 2 -eq 'NT'

1       2
-       -
windows NT

【讨论】:

    【解决方案2】:

    构建整个数组的示例

    $Splitted_List = @()
    
    foreach($Line in Get-Content '.\myfilewithuseragents.txt'){           
        $Splitted = $Line -split ":"
        $Splitted_Object = [PSCustomObject]@{
            $part1 = $splitted[0]
            $part2 = $Splitted[1]        
        }
        $Splitted_List.Add($Splitted_Object) | Out-Null    
    }
    

    【讨论】:

      【解决方案3】:

      对于每一行,您只需读取该行并使用该行中的字符串,您可以轻松地将其拆分

      $useragent = "windows:NT:v:n:n:d:n:n:n:n:m:n:n"
      

      那么第一部分将被引用为$useragent.Split(":")[0],第二部分将被引用为$useragent.Split(":")[1],等等。


      包括类似的 for 循环

      foreach($useragent in Get-Content '.\myfilewithuseragents.txt') {
        $splitted = $useragent.Split(":")
        $part1 = $splitted[0]
      }
      

      【讨论】:

      • 如果我收到“...不包含名为'Split'的方法”的错误消息,我该怎么做?
      • 我很确定这应该可以工作,因为 .Split() 是每个字符串的方法。你确定你写了这样的代码吗? The answer @LotPings gave 是更官方的解决方案,虽然我不确定它如何适用于不同的列长度
      猜你喜欢
      • 2020-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-23
      • 2020-07-27
      • 2019-01-15
      • 1970-01-01
      相关资源
      最近更新 更多