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

回复 12# hqhlwz


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

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

本帖最后由 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

回复 16# hqhlwz

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

TOP

回复 22# hqhlwz

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

TOP

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

回复 22# hqhlwz

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

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

TOP

回复 26# hqhlwz

你后面这部分带制表符,你先前发的链接只有空格。你发个完整内容的的链接,再给你改下,或者你在WORD把制表符替换为空格。

TOP

回复 29# hqhlwz

把制表符也选上 一起作分隔。

TOP

回复 29# hqhlwz

你的 1.txt 是以制表符和空格混杂分隔的。偶们的 final.txt 是以空格分隔的。明白不。所以你把空格换成制表符,或者把制表符控成空格。

TOP

返回列表