【问题标题】:Powershell text string to CSVPowershell 文本字符串到 CSV
【发布时间】:2014-10-06 23:59:15
【问题描述】:

我最初认为这个问题比实际情况更复杂,但在四处挖掘之后,我似乎仍然无法找到可以重新调整用途的解决方案。我正在尝试使用通配符,但也许我用错了方式

我有一个文本文件如下:

SQL*Plus: Release 11.2.0.1.0 Production on Wed Aug 13 14:20:22 2014
Copyright (c) 1982, 2010, Oracle.  All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options

EXTERNAL ID

--------------------------------------------------------------------------------

'M1

---


12345678-1

M07


18765432-1

M14

19638527-1

M14



EXTERNAL ID

--------------------------------------------------------------------------------

'M1

---


17418529-1

M07

我想要一个包含 2 列的 CSV,例如:

EXTERNAL ID     M01

12345678-1      M07

18765432-1      M14

19638527-1      M14

17418529-1      M07

感谢任何见解或帮助

【问题讨论】:

  • 您所需的 CSV 将以空格分隔,并且具有三个列标题,而不是您编写的两个列标题。我想我知道您想要什么,但是如果您的要求准确,那就太好了。如果您发布了您尝试过的内容并解释了哪些内容不起作用,那也很好。
  • 是的,我们可以为您提供帮助,但此示例不够具体。例如,M1 前面有一个刻度线。这是故意的吗?你想把它去掉还是保留?
  • @EBGreen - 为格式化道歉,我今天大部分时间都在盯着这个,我想我只是脱口而出我尝试过的事情,而不是展示富有成效的步骤。
  • @George Mauer - M1 之前的 Tick 与查询一起导出。我所做的唯一更改是连字符周围的“”,因为它们将字体更改为粗体。理想情况下删除它,但如果我可以生成任何 2 列格式的 CSV,我会很高兴。我可以在之后更改/剥离标题
  • 编辑是否正确?你想保留刻度吗?

标签: string powershell csv wildcard


【解决方案1】:

这是我认为会做我想做的事情。它可能会变得更高效、更小,但我更倾向于易于阅读和理解:

$res = @()
$content = get-content SomeFile.txt | ?{($_ -ne 'EXTERNAL ID') -AND (-NOT $_.StartsWith('"-')) -AND ($_ -ne "'M1") -AND (-NOT $_.Startswith('SQL*')) -AND ($_ -ne '')}

for($count = 0; $count -lt $content.Count; $count = $count + 2){
    $id = $content[$count]
    $m = $content[$count + 1]
    $temp = New-Object PSCustomObject -Property @{'External ID' = $id;
                                                  'M01' = $m;
    }
    $res += $temp
}
$res | Export-CSV .\Som\Path\Name.csv -NoTypeInformation

【讨论】:

  • 我砍掉了你漂亮的代码,但我很高兴地说我用这个答案作为构建块,我的程序现在像梦一样工作(虽然速度很慢,但那是我的低效编码)。感谢您的时间和帮助!
【解决方案2】:

类似于 EBGreen 的答案,但我认为更简单。

$Col2=$false
gc c:\temp\test.txt |Select -skip 6| ?{![string]::IsNullOrEmpty($_) -and $_ -notmatch "^(---|External|'M1)"} | %{
    If($Col2){
        [PSCustomObject][Ordered]@{
            'External ID'=$Col1
            "'M1"=$_}
        $Col2=$false
        }else{
            $Col1=$_
            $Col2=$true
        }
    } | Export-Csv C:\temp\New.csv -NoTypeInformation

【讨论】:

  • 谢谢你,尝试对我的文件运行它时出现了一些小问题,并且由于我缺乏阅读 PS alis 的经验,我无法成功地改变这一点,所以用 EBGreens 回答。再次感谢您抽出宝贵的时间帮助格式化问题。
猜你喜欢
  • 2021-03-28
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 2021-03-21
  • 2014-03-08
  • 1970-01-01
  • 1970-01-01
  • 2013-10-10
相关资源
最近更新 更多