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

TOP

本帖最后由 xczxczxcz 于 2018-11-15 16:44 编辑

回复 22# hqhlwz

我知道问题了,你发的文件和你发的链接的文本格式不一样,你大爷的。又来这一套。你发的网上链接下载的文件是空格分格的,而你现在的文件有空格也有制表符。等下给你弄个新的。

把你完整文件发个链接,不要部分。

TOP

回复 22# hqhlwz

WORD  EXCEL 都正常。你的是什么鸟 word. 偶打开木有任何问题,所有空格都是一样的。

TOP

回复 20# xczxczxcz
数据内容是问没问题 ,问题 调用这个文本的时候    中间那个空格 长度 太长   软件 不能调用出来   软件只能 自动默认 红色框里面的短空格长度  我发个我手工修改过的 能调用的文本 你用word对比一下 就明白
下图打勾的数据 软件能读出来 打叉的不能读出来   后来发现  是中间 空格距离的问题   复制打勾能识别的空格  覆盖下面空格距离 然后 就能软件就能识别
我这样表达能理解吗   大概意思是 空格符 的距离问题

TOP

回复 18# flashercs


    word很麻烦  没bat那么方便实际

TOP

回复 16# hqhlwz

刚登陆电脑,用WORD 打开看了下,木有问题啊。都很正常啊。

TOP

本帖最后由 xczxczxcz 于 2018-11-15 20:27 编辑

回复 17# hqhlwz


    我看不出脚本有何异样, 你的原文件是sort 排序好了,所以倒排、倒序是一样的。你用PS脚本或其他大神的脚本试试,也可试用下面的
修改一下 添加对制表符支持  输出制表符
  1. @echo off & cd /d "%~dp0"
  2. echo %time%
  3. setlocal EnableDelayedExpansion
  4. (for /f "tokens=1* delims= " %%a in ('sort /r 00.txt') do (
  5. set "aa=%%a" & set "bb=%%b" & set "bb=!bb: =!"
  6. echo !aa:~2! !bb: =!
  7. ))>final.txt
  8. echo %time%
  9. pause
复制代码
或者需要检查一下你原文件。手机码字可能有疏漏。

TOP

回复 17# hqhlwz


    word都打开了,就不能批量替换掉?

TOP

回复 14# xczxczxcz

再次请教第二个问题  不知道能否解决   转换后文本 数据不能调用  后来排查出事空格长度的问题 图中红色方框内的数据能识别   红色框以下的 需要一个一个修改 才能使用  请问 批处理有否方法统一处理呢
用笔记本打开 无区别   但后来用 word 打开 才发现问题  请指教 谢谢

TOP

本帖最后由 hqhlwz 于 2018-11-15 02:06 编辑

回复 13# xczxczxcz


    哦 是的  按照倒排结果就可以  大小的 不需要 . 但 为什么 用 你的方法 与用 sort的结果 会是一样的呢 ? 我原始文档 开头是日期数字 后是随机0到9的随机数字    谢谢指教

TOP

本帖最后由 WHY 于 2018-11-16 19:50 编辑
  1. gawk "{a[NR]=substr($1,3)\" \"$2\"\"$3\"\"$4\"\"$5\"\"$6}END{for(i=NR;i>0;i--)print a[i]}" 1.txt > 2.txt
复制代码
  1. PowerShell "[Collections.ArrayList]$arr=[IO.File]::ReadAllLines('1.txt') -replace '^20|(?<!\d\d)\s';$arr.Reverse();sc 2.txt -Value $arr"
复制代码
  1. sort /r 1.txt | sed -r "s/^20|\s//g; s/[0-9]{5}$/ &/" > 2.txt
复制代码
1

评分人数

    • smss: 你咋这么牛技术 + 1

TOP

回复 12# hqhlwz

    针对你这个文本。全是从小到大的排序。当然简单了。

纯 P 约 2秒
  1. @echo off & cd /d "%~dp0"
  2. echo %time%
  3. setlocal EnableDelayedExpansion
  4. (for /f "tokens=1*" %%a in (00.txt) do (
  5. set "aa=%%a"
  6. set "bb=%%b"
  7. echo !aa:~2! !bb: =!
  8. ))>%temp%\ref.txt
  9. sort /r "%temp%\ref.txt" /o final.txt
  10. del /q/f "%temp%\ref.txt"
  11. echo %time%
  12. pause
复制代码
=============================
纯 PS 约 0.6秒
  1. $StartTime= Get-date # 开始计时
  2. ((cat ".\00.txt") | sort -desc | %{
  3. $str=$_ -replace "^20","" -replace "[\s]",""
  4. $str.insert(10," ")
  5. }
  6. ) | SC ".\ok.txt"
  7. $Time = [DateTime]::Now - $StartTime
  8. Write-host "共用时间:"$Time.Seconds"秒 "$Time.Milliseconds"毫秒" -Fore RED
  9. # 计时结束
  10. pause
复制代码
==============================

TOP

回复 12# hqhlwz


    偶那个是倒排的。不是倒序排列。倒序是从大到小排列。若你的原始文档是从小到大排好的。那倒排和倒序是一样的。用 sort /r 当然快。若你的原始文本内容并不是从小到大排列,是乱序的。倒排和倒序就不一样了。偶写的是倒排。不管你原始顺序如何。都是按原文本从后到前排列。不会受字符大小的影响。看你的需求了。

TOP

回复 11# xczxczxcz
感谢你的提示 刚测试你的方法 用sort的方法 也测试了 结果是一样  但使用大神你的代码  转换过程有点慢
能否提高一下效率呢

附上 测试文件 下载地址http://data.917500.cn/cqssc_10000.txt

TOP

本帖最后由 xczxczxcz 于 2018-11-14 18:26 编辑

几万行用纯P,一行行倒过来赋值给变量。速度估计个把小时。
下面的为 PowerShell 版。WIN7以上系统可用。PS3.0以上最好。
121440行。约12秒完成 修改并全部倒排。
  1. $StartTime= Get-date # 开始计时
  2. ((cat ".\00.txt") | %{
  3. $str=$_ -replace "^20","" -replace "[\s]",""
  4. $str.insert(10," ")
  5. }
  6. ) | SC "$env:temp\ref.txt"
  7. $Total = (cat "$env:temp\ref.txt" -TotalCount -1).Count
  8. (Cat "$env:temp\ref.txt")[$Total..0] | SC ".\ok.txt"
  9. Ri "$env:temp\ref.txt" -force
  10. Write-host "共用时间:"([DateTime]::Now - $StartTime).TotalMilliseconds"毫秒" -Fore RED
  11. # 计时结束
  12. pause
复制代码
===========保存为 xxx.ps1  点右键用 windows powershell 运行。系统自带
-------------------------------------------------------------------------------------------------------

附上 纯P 供参考:
  1. @echo off & cd /d "%~dp0"
  2. echo %time%
  3. setlocal EnableDelayedExpansion
  4. for /f "tokens=1*" %%a in (00.txt) do (
  5. set "aa=%%a"
  6. set "bb=%%b"
  7. set /a n+=1
  8. set "str!n!=!aa:~2! !bb: =!"
  9. rem echo !aa:~2! !bb: =!
  10. )
  11. (for /l %%e in (%n% -1 1) do echo !str%%e!)>final.txt
  12. echo %time%
  13. pause & exit
复制代码
注不要用 sort /r 它会按大小排序。

TOP

返回列表