我在一个文本文件中有一行温度数据,我想将其转换为单列,并使用PowerShell脚本将其保存为CSV文件。温度由逗号分隔,如下所示:
21,22,22,22,22,22,22,20,19,18,17,16,15,14,13,12,11,10,9,9,9,8,8,9,8,8,8,9,9,8,8,8,9,9,9,8,8,8,8,8,9,10,12,14,15,17,19,20,21,21,21,21,21,21,21,21,21,21,21,20,20,20,20,20,22,24,25,26,27,27,27,28,28,28,29,29,29,28,28,28,28,28,28,27,27,27,27,27,29,30,32,32,32,32,33,34,35,35,34,33,32,32,31,31,30,30,29,29,28,28,27,28,29,31,33,34,35,35,35,36,36,36,36,36,36,36,36,36,37,37,37,37,37,37,38,39,40,42,43,43,43,43,43,42,42,42,41,41,41,41,40,39,37,36,35,34,33,32,31,31,31,31,31,31,31,31,31,31,
我已经尝试了几种基于搜索的方法在这个论坛我认为这可能会工作,但它返回一个错误:Transpose rows to columns in PowerShell
这是我尝试的修改后的代码,它返回:错误:“输入字符串的格式不正确。”
$txt = Get-Content 'C:myfile.txt' | Out-String
$txt -split '(?m)^,\r?\n' | ForEach-Object {
# create empty array
$row = @()
$arr = $_ -split '\r?\n'
$k = 0
for ($n = 0; $n -lt $arr.Count; $n += 2) {
$i = [int]$arr[$n]
# if index from record ($i) is greater than current index ($k) append
# required number of empty fields
for ($j = $k; $j -lt $i-1; $j++) { $row += $null }
$row += $arr[$n+1]
$k = $i
}
$row -join '|'
}
这看起来应该很简单,只需要一行数据就可以了。有没有什么建议可以帮助你把这一行数字转换成一列呢?
2条答案
按热度按时间ttygqcqt1#
试试这个:
标题是CSV文件中的第一行(或第一条记录)。在本例中,它是一个单词,因为只有一列。
值是输入中逗号之间的项。在这种情况下,逗号上的-split生成一个字符串数组。注意,如果逗号是分隔符,那么在最后一个温度之后将没有逗号。您的数据看起来不是这样的,但我假设真实的数据是这样的。
然后,我们只需要将头和数组写入一个文件。但是所有的逗号都发生了什么呢?事实证明,对于一个单列CSV文件,没有逗号分隔字段。因此,结果是一个简单的CSV文件。
最后,使用Import-csv读取结果并以表格格式显示,对输出进行测试。
这不一定是最好的编码方式,但它可能会帮助初学者习惯powershell。
mm9b1k5b2#
假设我正确地理解了您的意图,基于您的口头描述(而不是您自己的编码尝试):
更简洁的替代方法,使用可扩展(插值)的here-string:
out.csv
则包含: