[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[问题求助] PowerShell将重复国家名字前的字母重新排序

本帖最后由 meixi 于 2022-12-1 09:56 编辑

大家好!

图片中左侧是要处理的文本, 右侧是处理后的效果! 不同的颜色仅起到区分作用


要处理的文本中, 同一个国家前的字母不相同, 处理后要改成相同的,例如
中国河北 的前面是A
中国北京 的前面是B
处理后全改为A

按相同的逻辑,把后面国家名前的字母, 也按A-Z的顺序重新修改
----------------------------------------------------------------------------------------------------
国家名怎么定位?

1.国家名所在的行之前和之后,有如下规律,其中X是一个大写字母,其它都是固定的
aaa X=
A 中国 河北
aaa Xv=

2.国家名的字数不固定, 但其相对位置是固定的
其所在的行前肯定有一个空格
空格后就是要修改的大写字母
大写字母后有一个空格
空格后是国家名,国家名的文字是连续的
国家名后有一个空格
空格后的文本是任意字符
  1. $s = @'
  2. aaa A=
  3. A 中国 河北
  4. aaa Av=
  5. 河北人
  6. aaa B=
  7. B 中国 北京
  8. aaa Bv=
  9. 北京人
  10. aaa C=
  11. C 美国 纽约
  12. aaa Cv=
  13. 纽约人
  14. aaa D=
  15. D 日本 东京
  16. aaa Cv=
  17. 东京人
  18. aaa E=
  19. E 日本 大阪
  20. aaa Dv=
  21. 大阪人
  22. aaa F=
  23. F 韩国 首尔
  24. aaa Dv=
  25. 首尔人
  26. 我是后面的文本, 我是不能被修改的
  27. '@
  28. #Todo 处理代码
  29. <# 处理后的效果
  30. aaa A=
  31. A 中国 河北
  32. aaa Av=
  33. 河北人
  34. aaa B=
  35. A 中国 北京
  36. aaa Bv=
  37. 北京人
  38. aaa C=
  39. B 美国 纽约
  40. aaa Cv=
  41. 纽约人
  42. aaa D=
  43. C 日本 东京
  44. aaa Cv=
  45. 东京人
  46. aaa E=
  47. C 日本 大阪
  48. aaa Dv=
  49. 大阪人
  50. aaa F=
  51. D 韩国 首尔
  52. aaa Dv=
  53. 首尔人
  54. 我是后面的文本, 我是不能被修改的
  55. #>
复制代码

本帖最后由 WHY 于 2022-12-1 13:37 编辑

图片看不清
  1. $arr = @'
  2. aaa A=
  3. A 中国 河北
  4. aaa Av=
  5. 河北人
  6. aaa B=
  7. B 中国 北京
  8. aaa Bv=
  9. 北京人
  10. aaa C=
  11. C 美国 纽约
  12. aaa Cv=
  13. 纽约人
  14. aaa D=
  15. D 日本 东京
  16. aaa Cv=
  17. 东京人
  18. aaa E=
  19. E 日本 大阪
  20. aaa Dv=
  21. 大阪人
  22. aaa F=
  23. F 韩国 首尔
  24. aaa Dv=
  25. 首尔人
  26. 我是后面的文本, 我是不能被修改的
  27. '@ -split '\r?\n';
  28. $char = [char[]](65..90);
  29. $hash = @{};
  30. $n = 0;
  31. for( $i = 0; $i -lt $arr.Count; $i++ ){
  32.     $m = [regex]::Match( $arr[$i], '^ [A-Z] (\S+)(.*)$' );
  33.     if( $m.Success ){
  34.         $key = $m.Groups[1].Value;
  35.         if( !$hash.ContainsKey($key) ){
  36.             $hash[$key] = $char[$n++];
  37.         }
  38.         $arr[$i] = ' ' + $hash[$key] + ' ' + $key + $m.Groups[2].Value;
  39.     }
  40. }
  41. $arr
复制代码
1

评分人数

    • meixi: 乐于助人技术 + 1

TOP

返回列表