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

回复 18# idwma

CMD窗口闪烁,58kb运行了一分钟,不太好用,不过结果很好
你这个代码我学习一下希望能尽快看懂,十分感谢

TOP

回复 17# newswan


    若干*.prt,多个文件的运行结果是一个空白文本文档

TOP

回复 23# jave000


    修改路径 $pathsour

TOP

回复 20# newswan


    我直接把路径这一行删了,就成功运行了。
但是关于设置空格数量的,无论是刚才的单个文件,还是现在的多个文件,这两段代码,修改空格数量的代码后,运行都是空白

TOP

回复 25# jave000

发现有这么一行,2个空格分隔
  1.   12    BELLOWS SEAL VALVE, HANDWHEEL, CLIMBING,  200          I372364            1
复制代码
暂时,解决办法,你先找例外情况,手动修改空格
或者导出的时候,导出为csv格式
找到所有例外情况,看看情况再决定

TOP

回复 26# newswan


    $a = $fc[$i].trim() -split "\s{4,}*"
这个代码改成2或3都不行,都是空白,我删了.trim()也是一样的结果
目前这样如果难以解决,也很实用了,我私信你了
我刚看到版规,直接得到结果应该是有偿的
不知应该怎么感谢

TOP

  1. $pathSour = "."
  2. $fileDest = "11.txt"
  3. [System.Collections.ArrayList] $da = @()
  4. get-childitem -path $pathSour *.rpt | foreach-object {
  5.     $fc = get-content $_
  6.     $i = 0
  7.     while ($i -le $fc.count)
  8.     {
  9.         if ($fc[$i] -match "^\s\s\s\d\s|^\s\s\d\d\s")
  10.         {
  11.             $a = @("") * 6
  12.             $a[1] =$fc[$i].substring(0,4).trim()
  13.             $a[2] =$fc[$i].substring(4,46).trim()
  14.             $a[3] =$fc[$i].substring(50,13).trim()
  15.             $a[4] =$fc[$i].substring(63,18).trim()
  16.             $a[5] =$fc[$i].substring(81).trim()
  17.             #$a = $fc[$i] -split "\s{2,}"
  18.             #$a[-1] = $a[-1] -replace "\sm",""
  19.             while ($fc[$i+1] -match "^\s{11}\S")
  20.             {
  21.                 $a[2] = $a[2] + " " + $fc[$i+1].trim()
  22.                 $i += 1
  23.             }
  24.             if (-not ($fc[$i+1] -match "^\s{11}\S"))
  25.             {
  26.                 $da.add($a -join "`t") | out-null
  27.             }
  28.         }
  29.         $i += 1
  30.     }
  31. }
  32. $da | out-file $fileDest
复制代码
按长度截取也可以
1

评分人数

TOP

  1. $reg = '(?-i)^\s+\d+\s+.*?(\S+)(?<!X)\s+(\d+(?:\.\d+)?)(?>\s+M)?$';
  2. $arr = (gc *.txt) -match $reg -replace $reg, '$1,$2';
  3. sc 1.csv $arr;
复制代码
1

评分人数

TOP

本帖最后由 jave000 于 2021-6-23 23:52 编辑

回复 29# WHY


    你的代码好少啊……但是确实能生成两列,好强,它还能修改成显示五列吗?

TOP

本帖最后由 newswan 于 2021-6-24 00:00 编辑
  1. $Excel = New-Object -ComObject Excel.Application
  2. $Excel.Visible = $true
  3. $Workbook = $Excel.Workbooks.Add()
  4. $Sheet = $Workbook.Worksheets.Item(1)
  5. for ($i =1 ; $i -le $da.count ; $i++)
  6. {
  7.     $Sheet.cells($i,1).value = $da[$i-1]
  8. }
  9. $colA=$sheet.range("A1").EntireColumn
  10. $colrange=$sheet.range("A1")
  11. $colA.texttocolumns($colrange,1,1,$true,$true,$false,$false,$false)
  12. $sheet.columns.autofit()
  13. $Workbook.SaveAs(($PSScriptRoot + "\" + $fileDest))
  14. $excel.Quit()
复制代码
生成 excel 文件 加到后面
1

评分人数

TOP

只需要保留 2 4 5 ?

TOP

本帖最后由 jave000 于 2021-6-23 23:59 编辑

回复 32# newswan

出现了这样的连续报错,运行速度也很慢,但也出了结果,只不过结果文件特别大,200KB的若干PRT文件,生成了一个4MB多的txt文件

    无法对 Null 数组进行索引。
所在位置 行:11 字符: 13
+         if ($fc[$i] -match "^\s\s\s\d\s|^\s\s\d\d\s")
+             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: ( [],RuntimeException
    + FullyQualifiedErrorId : NullArray

无法对 Null 数组进行索引。
所在位置 行:11 字符: 13
+         if ($fc[$i] -match "^\s\s\s\d\s|^\s\s\d\d\s")
+             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [],RuntimeException
    + FullyQualifiedErrorId : NullArray

无法对 Null 数组进行索引。
所在位置 行:11 字符: 13
+         if ($fc[$i] -match "^\s\s\s\d\s|^\s\s\d\d\s")
+             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [],RuntimeException
    + FullyQualifiedErrorId : NullArray

无法对 Null 数组进行索引。
所在位置 行:11 字符: 13
+         if ($fc[$i] -match "^\s\s\s\d\s|^\s\s\d\d\s")
+             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [],RuntimeException
    + FullyQualifiedErrorId : NullArray

TOP

回复 33# newswan


    老大你还是早点休息吧,我受之有愧。如果两个空格很难解决,我手改也行的。

TOP

本帖最后由 newswan 于 2021-6-24 00:18 编辑

回复 34# jave000


    我这里正确的,你检查下?
  1. $pathSour = "."
  2. $fileDest = "11"
  3. [System.Collections.ArrayList] $da = @()
  4. get-childitem -path $pathSour *.rpt | foreach-object {
  5.     $fc = get-content $_
  6.     for ($i = 0 ; $i -le $fc.count ; $i++)
  7.     {
  8.         if ($fc[$i] -match "^\s\s\s\d\s|^\s\s\d\d\s")
  9.         {
  10.             $a = @("") * 6
  11.             $a[1] =$fc[$i].substring(0,4).trim()
  12.             $a[2] =$fc[$i].substring(4,46).trim()
  13.             $a[3] =$fc[$i].substring(50,13).trim()
  14.             $a[4] =$fc[$i].substring(63,18).trim()
  15.             $a[5] =$fc[$i].substring(81).trim()
  16.             $a[5] = $a[5] -replace "\sm",""
  17.             while ($fc[$i+1] -match "^\s{11}\S")
  18.             {
  19.                 $a[2] = $a[2] + " " + $fc[$i+1].trim()
  20.                 $i += 1
  21.             }
  22.             if (-not ($fc[$i+1] -match "^\s{11}\S"))
  23.             {
  24.                 $da.add($a -join "`t") | out-null
  25.             }
  26.         }
  27.     }
  28. }
  29. $da | out-file ($fileDest + ".txt")
复制代码
1

评分人数

TOP

回复 35# jave000


    我还在下新的 office 2021版的

TOP

返回列表