【发布时间】:2019-07-05 16:30:09
【问题描述】:
我有一个编辑 CSV 并保存它的 powershell 脚本。然后我复制 CSV,但将其另存为 .txt
有人告诉我,从 filename.csv 重命名为 filename.txt 不是正确的方法(我认为它有效),但是还有另一种方法可以“正确”将 CSV 保存为 TXT 文件
这是我将 CSV 保存为 .TXT 的当前方式
$csv = 'C:\Users\xxx\Desktop\xxx Playground\CSV Edit\20190522-Name-Num-Location-hey-hey.csv'
$path = 'C:\Users\xxx\Desktop\xxx Playground\CSV Edit\'
$pathdone = 'C:\Users\xxx\Desktop\xxx Playground\CSV Edit\done'
$txtfile = $date + $lastname + "-" + $lastxxx + "-" + $lastnum + "-" + $lastxxxtwo + "-" + $lastloc + "-" + $newid + ".txt"
# Save txt file as new format
Copy-Item "$csv" -Destination "$path$txtfile"
提醒,我的方法确实有效并输出 .TXT ,但有没有不同的方法可以“正确”执行此操作而不重命名“复制项并将其保存为 txt”
$data = Import-Csv -Path $csv -Header 'Stuff','City','Number','InStock' # or add whatever headers you like
# get the first column as array of values
$column1 = $data.Stuff
# rotate the array values
switch ($column1.Count) {
1 { Write-Host "Nothing to do here. There is only one row of data.."; break}
2 {
# swap the values
$data[0].Stuff,$data[1].Stuff = $data[1].Stuff,$data[0].Stuff
break
}
default {
$newColumn1 = @($column1[-1]; $column1[0..($column1.Count -2)])
# re-write the first column in the data
for ($i = 0; $i -lt $newColumn1.Count; $i++) {
$data[$i].Stuff = $newColumn1[$i]
}
}
}
【问题讨论】:
-
那么,您的同事认为这不是“正确”或“正确”的原因是什么?我认为区分“文本文件”和“
.txt文件”也很重要。您可以获取 any 文件并给它一个.txt扩展名;扩展名是否准确地描述了内容是另一回事。否则,CSV 是一种基于文本的格式,因此根据定义,它是文本文件的子集,因此它本身就是文本。这与询问如何将.ps1、.ini或.css文件保存为文本相同,仅举几个例子。 -
@bacon ,我们把这个 csv 文件重命名为 .txt ,现在我们把这个 .txt 加载到一个刮刀中。我的同事认为“&”和“撇号”没有被正确处理并导致错误。 (我们在 csv/txt 中有问号(两者)突然出现)他认为我的脚本将 csv 编辑并重命名为 .txt 导致了这种情况。现在我用我们编辑的 9 行创建了一个新的 CSV,我添加了(& 和撇号),看看它是否会导致错误(它没有)..他仍然相信这是因为重命名 .csv作为 .txt 而不是“另存为 .txt”
-
听起来问题出在编辑 CSV 的脚本(问号表明文本编码不正确)或刮板本身,但您的同事将其归因于编辑后的 CSV → 文本“转换”。您是否尝试过在编辑前后在 CSV 上运行差异,以确切了解发生了什么变化?如果您使用 PowerShell cmdlet 执行编辑,请注意它们会标准化其输出;例如,如果您运行
"First, Second, Third`n1, 2, 3" | ConvertFrom-Csv | ConvertTo-Csv -NoTypeInformation,输出会被引用,但会丢失逗号后的空格。 -
整个文本编码是他认为是脚本的原因,但是......我已经用 & 符号和 ' 符号测试了脚本,都没有引起问题,这些是唯一的特殊字符在我们编辑的 CSV 文件中。我什至用小样本行(9 行)进行测试,并且在脚本编辑它时没有任何问题。脚本唯一会打开 CSV,通过将第一列中的最后一项移动到最顶部来更改第一列。然后我保存 csv.. 并将其重命名为 .txt ...我将此部分添加到原始帖子中,以便您查看它是如何编辑的。
标签: powershell csv