标题: [文本处理] 批处理如何实现数字排序? [打印本页]
作者: mlxsj1985 时间: 2019-3-7 14:39 标题: 批处理如何实现数字排序?
例如 125 621 123 121 122 625需要排成
112 112
122
123
125 125
需要的是把数字6变成1,路过大神帮帮忙
作者: mlxsj1985 时间: 2019-3-7 14:45 标题: 如何实现txt文本数字排序
例如 125 621 123 121 122 625需要排成
112 112
122
123
125 125
需要的是把数字6变成1,路过大神帮帮忙,10元红包答谢
作者: mlxsj1985 时间: 2019-3-7 15:31
回复 2# smss
好像不是啊
作者: smss 时间: 2019-3-7 16:09
回复 4# mlxsj1985
那看不懂你的问题
作者: flashercs 时间: 2019-3-7 16:21
本帖最后由 flashercs 于 2019-3-7 16:51 编辑
a.bat- @echo off
- set "file1=e:\test\1.txt"
- set "file2=e:\test\2.txt"
- powershell -command "((([regex]'\d+').Matches([System.IO.File]::ReadAllText(\"%file1%\",[System.Text.Encoding]::Default))|ForEach-Object{(($_.Value -replace '6','1').ToCharArray()|Sort-Object) -join ''})|Sort-Object|Group-Object|%%{$_.Group -join ' '})|set-content -LiteralPath \"%file2%\""
- pause
- exit /b
复制代码
作者: ivor 时间: 2019-3-7 16:22
回复 1# mlxsj1985 - "125 621 123 121 122 625".Replace("6","1").Split(' ') | group | Sort-Object -Property Name
复制代码
- @echo off
- set num=125 621 123 121 122 625
- for /f "delims=" %%a in ('powershell -command "& {'%num%'.Replace('6','1').Split(' ') | group | Sort-Object -Property Name}"') do (
- echo %%a
- )
- pause
复制代码
作者: ivor 时间: 2019-3-7 16:38
本帖最后由 ivor 于 2019-3-7 16:39 编辑
- @echo off
- for /f "delims=" %%a in ('powershell -command "& {[regex]::Matches([System.IO.StreamReader]::new('C:\Users\mac\Desktop\ip.txt').ReadToEnd().Replace('6','1'),'\d+') | group | sort -Property Name | select Group}"') do (
- echo %%a)
- pause
复制代码
作者: xczxczxcz 时间: 2019-3-7 17:50
偶感觉楼上诸位把数字转为字符串排序,若数字的位数不一样,结果就不是按数字大小排序了。好像最后结果是哈希表,还需进一步处理。
作者: yhcfsr 时间: 2019-3-7 17:53 标题: 注意修改第9行的文本路径
本帖最后由 yhcfsr 于 2019-3-7 20:28 编辑
- <# :
- @echo off&cd/d "%~dp0"
- more +8 "%~f0" >"%temp%\%~n0.ps1"
- powershell -NoLogo -NoProfile -ExecutionPolicy bypass -File "%temp%\%~n0.ps1"
- del /f /q "%temp%\%~n0.ps1"
- pause
- #>
-
- $file = 'C:\Users\CF\Desktop\1.txt';#文本路径
-
- $ErrorActionPreference = 'SilentlyContinue';
- $text = [io.file]::ReadAllText($file,[text.encoding]::Default);
- [System.Collections.ArrayList] $arr = ($text -split '\s');
- $result = @{};
-
- foreach($elem in $arr)
- {
- if($elem) {
- $elem = $elem -replace '6','1';
- $str='';
- $elem -split ''|sort-object|%{$str+=$_}
-
- $result.Add([int] $str, $str);
- if(!$?) { $result[[int] $str] += ' ' + $str; }
- }
- }
-
- $arr.Clear();
- foreach($key in $result.Keys|Sort-Object)
- {
- [void] $arr.Add($result[$key]);
- }
-
- [io.file]::WriteAllLines('结果.txt',$arr,[text.encoding]::Default);#输出结果
复制代码
作者: mlxsj1985 时间: 2019-3-7 19:47
回复 11# yhcfsr
大神思路完全是正确的,我可能标题没有表达清楚,124 142 241 214 412 421都等于124 带6的全变1 166变111 356变135 其余的一点问题都没有,简直完美。
作者: 523066680 时间: 2019-3-7 20:11
- my @nums = qw/125 621 123 121 122 625 6625 1126 1125/;
- grep { tr/6/1/; $_ = join("", sort split("", $_)) } @nums;
- print join(",", sort { $a <=> $b } @nums);
复制代码
112,112,122,123,125,125,1112,1125,1125
作者: WHY 时间: 2019-3-7 20:14
- set "str=125 621 123 121 122 625"
- PowerShell "[int[]]('%str:6=1%' -split ' ') | sort | group | %%{($_.Name + ' ') * $_.Count}"
复制代码
作者: WHY 时间: 2019-3-7 20:16
本帖最后由 WHY 于 2019-3-9 00:14 编辑
- @echo off & setlocal enabledelayedexpansion
- if "%~1" == "arg" (
- set "str=125 621 123 121 122 625"
- for %%i in ( !str:6^=1! ) do (
- set "var=%%i"
- set "s="
- for /L %%j in (0 1 9) do (
- for %%k in ("!var:%%j=" "!") do set "s=!s!%%j"
- set "s=!s:~0,-1!"
- )
- echo;!s!
- )
- ) else (
- for /f %%i in ('"%~f0" arg ^| sort ^& echo;/') do (
- if "%%i" == "!s!" (
- set /p "=!s! "
- ) else if defined s (
- echo;!s!
- )
- set "s=%%i"
- ) < nul
- pause & exit /b
- )
复制代码
- @echo off
- set "str=125 621 123 121 122 625"
- PowerShell "'%str:6=1%' -split '\s+' | %%{([char[]]$_ | sort) -join ''} | sort | group | %%{($_.Name + ' ') * $_.Count}"
- pause
复制代码
作者: yhcfsr 时间: 2019-3-7 20:31
回复 12# mlxsj1985
之前没仔细看内容.现在代码更正了.
作者: 523066680 时间: 2019-3-7 20:40
回复 16# yhcfsr
完整的问题描述渐渐浮出水面
作者: yhcfsr 时间: 2019-3-7 22:05
回复 14# WHY
我参考大神的写法,又写了一个- $file = '1.txt';#文本路径
- $result='结果.txt';#输出文件
-
- $text = type $file -ReadCount 0
- [int[]]($text -split ' ') | sort |%{ [int] (($_ -replace '6','1' -split ''|sort) -join '')}|group|%{$_.group -join ' '}|sc $result
复制代码
作者: mlxsj1985 时间: 2019-3-8 07:37
回复 7# flashercs
大神昨天4点就回复了,我看代码太短,没当回事,今早测试结果完全正确,大神就是大神,
加大神QQ,发个红包聊表感谢。
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |