标题: [文本处理] 求助在TXT每行随机位置添加指定字符的BAT代码 [打印本页]
作者: wwwstwyb2 时间: 2018-12-18 00:04 标题: 求助在TXT每行随机位置添加指定字符的BAT代码
我想实现在一个TXT里,在每一行的随机位置,插入指定的五个字符。具体怎么实现呢,毫无头绪。
举例,我想在每一行当中,分别插入“AA”,“BB”,“CC”,“DD”和“EE”
假设TXT里有三行:
12345678
87654321
66666666
经过批处理指令后,在每一行随机位置插入之后,处理结果就可能变成这样:
1AABB234CC5DD67EE8
876AA5BB4CC3DD2EE1
AA6BB66CC66DD66EE6
请问怎么实现,先谢谢大神了。
作者: codegay 时间: 2018-12-18 05:32
相当于两个list相连,然后shuffle打乱就可以了。
[1, 2, 3] + [a, b, c]
打乱后重新拼接成字符串。
作者: codegay 时间: 2018-12-18 05:46
是否允许字符插入后到行末?
类似变成
1aa2bb3cc
作者: flashercs 时间: 2018-12-18 06:20
本帖最后由 flashercs 于 2018-12-18 06:43 编辑
随机插入字符.bat- @echo off
- for /f "tokens=1 delims=:" %%A in ('findstr /n "#######*" %0') do more +%%A %0 >"%~dpn0.ps1"
- powershell.exe -ExecutionPolicy Bypass -File "%~dpn0.ps1"
- pause
- exit /b
- ##################################################################
- # filePath,relative to the script directory or absolute path.设置文件路径,相对或绝对
- $filePath = '10.txt'
- # inserted string list.设置插入字符串列表
- $strInsert = @('AA', 'BB', 'CC', 'DD', 'EE')
- if (![System.IO.Path]::IsPathRooted($filePath)) {
- $filePath = [System.IO.Path]::Combine([System.IO.Path]::GetDirectoryName($MyInvocation.MyCommand.Definition), $filePath)
- }
- function getInsertPosition {
- param (
- [string]$str,
- [string[]]$arrInsertStr
- )
- $a = [System.Array]::CreateInstance([int], $arrInsertStr.Count)
- $len = $str.Length + 1
- for ($i = $a.Count - 1; $i -ge 0 ; $i--) {
- $a[$i] = Get-Random -Minimum 0 -Maximum $len
- }
- $a = $a|Sort-Object
- return $a
- }
- (Get-Content -LiteralPath $filePath -Encoding Default|ForEach-Object {
- $arr = getInsertPosition -str $_ -arrInsertStr $strInsert
- $index = 0
- $s = ''
- for ($i = 0; $i -lt $arr.Count; $i++) {
- $s += $_.Substring($index, $arr[$i] - $index) + $strInsert[$i]
- $index = $arr[$i]
- }
- $s += $_.Substring($index)
- $s
- })|Set-Content -LiteralPath $filePath -Encoding Default
复制代码
作者: wwwstwyb2 时间: 2018-12-18 14:32
回复 4# flashercs
谢谢大神,如果代码要加两个条件,比如空格跳过,还有不添加到行的首和尾,这个能实现吗
作者: flashercs 时间: 2018-12-18 14:40
本帖最后由 flashercs 于 2018-12-18 14:42 编辑
回复 5# wwwstwyb2
空行跳过?还是空格?
不添加到行首/尾?如果一行一共1个字符怎么不添加到行首尾?
你的举例也是添加到行首了....
作者: xczxczxcz 时间: 2018-12-18 21:18
第一个字符和最后一个字符之间,两个字符以上才会添加。- $插入字符=@('祝','大家','猪年','元旦','快乐')
- Function EachLine {
- Param ([string]$Line)
- [Collections.ArrayList]$行字符=@($Line.toCharArray())
- $随机数=(1..$插入字符.Count)|%{get-random -input (1..($Line.Length -1))}|sort
- for ($i=$插入字符.Count -1; $i -ge 0; $i--){$行字符.Insert($随机数[$i],$插入字符[$i])}
- $NewStr=-join $行字符
- $NewStr
- }
- Get-Content ref.txt|ForEach-Object{if($_.Length -ge 2) {EachLine $_} else {$_}}
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |