标题: [问题求助] PowerShell将Csv文件某列中的数字补全空位 [打印本页]
作者: 5i365 时间: 2022-1-26 12:07 标题: PowerShell将Csv文件某列中的数字补全空位
将csv文件的第一列中的数字,扩充为N位数, 可以指定第一位从i数字开始
用重命名软件可以很容易实现, 想知道如果用Ps实例, 提前感谢!
例如:
位数: $n=4 则表示扩充为4位数
数字: $i=2 则表示第一位从2开始
期待的结果:
排序,语言,歌手,歌名
2001,国语,付雪,金玉良缘
2002,国语,阿吉太组合,阿衣莫
2003,国语,洛先生,孤城
...
2010,国语,乔佳旭,雪下的时候
-------------------------------------
a.csv 示例:
排序,语言,歌手,歌名
1,国语,付雪,金玉良缘
2,国语,阿吉太组合,阿衣莫
3,国语,洛先生,孤城
4,国语,刘艺雯,听闻远方有你
5,国语,海来阿木,五十年以后
6,国语,海来阿木,浮生记
7,国语,杨小壮,最后的人
8,国语,莫叫姐姐,你能不能不要离开我 (莫叫语版)
9,国语,郁可唯,路过人间
10,国语,乔佳旭,雪下的时候
作者: idwma 时间: 2022-1-26 15:46
本帖最后由 idwma 于 2022-1-26 15:57 编辑
- gc a.csv|%{if($_ -match '^(\d+)(\,.*)'){"{0}{1}" -f ([int]("$i"+"$("{0:d$($n-1)}" -f 0)")+[int]$matches[1]),$matches[2]}else{$_}}
复制代码
作者: for_flr 时间: 2022-1-26 17:01
本帖最后由 for_flr 于 2022-1-26 17:26 编辑
- $i=2
- $n=4
- $f=gc a.csv
- $new=for($a=0;$a -le $f.count;$a++){
- if($f[$a] -match "^\d"){
- "{0}{1:d$($n-1)}{2}{3}" -f $i,[int]$f[$a].split(',',2)[0],',',$f[$a].split(',',2)[1]
- }else{$f[$a]}
- }
- sc a_new.csv $new
复制代码
作者: for_flr 时间: 2022-1-26 17:05
回复 2# idwma
http://www.bathome.net/redirect. ... 0888&ptid=61393
你好,我在你这个帖子看到$1的用法,方便讲解一下吗?
作者: idwma 时间: 2022-1-26 17:11
回复 4# for_flr - https://docs.microsoft.com/zh-cn/powershell/module/microsoft.powershell.core/about/about_regular_expressions
复制代码
作者: 5i365 时间: 2022-1-26 17:14
回复 3# for_flr
这个执行后, 全都变成了 2 后面还重了
作者: 5i365 时间: 2022-1-26 17:16
回复 2# idwma
执行后一直跑红代码
作者: idwma 时间: 2022-1-26 17:18
回复 7# 5i365
$i$n这两变量没加上吗?
作者: 5i365 时间: 2022-1-26 17:19
回复 2# idwma
我找到一种, 源文件, 输出文件, 还有代码文件, 都使用utf8代码来执行的方法, 在批处理命令前,加上下面两行:- #@&cls&powershell "type '%~0'|out-string|iex"&pause&exit
- $OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = New-Object System.Text.UTF8Encoding
复制代码
作者: 5i365 时间: 2022-1-26 17:23
回复 8# idwma
感谢大侠提醒, 加上后, 就OK了!
但是代码太精简了, 看不懂
作者: for_flr 时间: 2022-1-26 17:29
回复 5# idwma
谢谢,我误以为是powershell里面的用法。
回复 6# 5i365
已修改。
作者: 5i365 时间: 2022-1-26 17:32
回复 2# idwma
不知道为什么, 在bat里加上下面两行不能生效, 执行后, 也不显示 : 按任意键退出, 生成的也不是utf8
#@&cls&powershell "type '%~0'|out-string|iex"&pause&exit
$OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = New-Object System.Text.UTF8Encoding
作者: 5i365 时间: 2022-1-26 17:54
回复 11# for_flr
我想实现, 源文件和输出的文件, 都是utf8, 但是不去找,去修改 gc 和 sc 的地方的编码, 能实现吗?
加下面的两种代码, 都不行, 编码问题, 实在太麻烦了
1.
$PSDefaultParameterValues['Out-File:Encoding'] = 'utf8'
2.
$OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = New-Object System.Text.UTF8Encoding
作者: for_flr 时间: 2022-1-26 18:04
回复 13# 5i365
sorry,我很少遇到编码问题,没关注过这些。
作者: idwma 时间: 2022-1-26 19:01
回复 12# 5i365 - https://docs.microsoft.com/zh-cn/powershell/module/microsoft.powershell.core/about/about_character_encoding
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |