Board logo

标题: [问题求助] 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 编辑
  1. 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 编辑
  1. $i=2
  2. $n=4
  3. $f=gc a.csv
  4. $new=for($a=0;$a -le $f.count;$a++){
  5. if($f[$a] -match "^\d"){
  6. "{0}{1:d$($n-1)}{2}{3}" -f $i,[int]$f[$a].split(',',2)[0],',',$f[$a].split(',',2)[1]
  7. }else{$f[$a]}
  8. }
  9. 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
  1. 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代码来执行的方法, 在批处理命令前,加上下面两行:
  1. #@&cls&powershell "type '%~0'|out-string|iex"&pause&exit
  2. $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
  1. https://docs.microsoft.com/zh-cn/powershell/module/microsoft.powershell.core/about/about_character_encoding
复制代码





欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2