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

本帖最后由 WHY 于 2021-6-25 21:54 编辑
  1. $dir = 'E:\Test\PRT';     #存放prt文件的目录路径
  2. $reg = '(?-i)^\s+(\d+)\s+(.+)(?<!\s)\s+(\d+(?:X\d+)?)\s+(.+)(?<![\sX])\s+(\d+(?:\.\d+)?(?>\s+M)?)$';
  3. $arr = (gc ($dir + '\*.prt')) -match $reg -replace $reg, '"$1","$2","$3","$4","$5"';
  4. sc 1.csv $arr;
复制代码
用顶楼的附件测试,得到的结果:5列、4600行

TOP

回复 46# jave000


    "一是描述这一列只显示第一行" 这句是个啥意思?
别的很好改
  1. $fd  = 'E:\Test\PRT';     #存放prt文件的目录路径
  2. $arr = @();
  3. $reg = '(?-i)^\s+(\d+)\s+(.+)(?<!\s)\s+(\d+(?:X\d+)?)\s+(.+)(?<![\sX])\s+(\d+(?:\.\d+)?)(?>\s+M)?$';
  4. forEach( $f In (dir $fd -Filter *.prt) ){
  5.     $s = $f.BaseName;
  6.     $s = $s -replace '^(....)(....)(....)(.....)(.+)$', '$1-$2-$3-$4-$5';
  7.     $arr += @(gc $f.FullName) -match $reg -replace $reg, ('"$1","$2","$3","$4","$5","' + $s + '"');
  8. }
  9. sc 1.csv $arr;
复制代码
1

评分人数

TOP

本帖最后由 WHY 于 2021-6-29 00:00 编辑

回复 51# jave000
  1. $fd  = 'E:\Test\PRT';     #存放prt文件的目录路径
  2. $reg = '(?-i)^\s+(\d+)\s+(.+)(?<!\s)\s+(\d+(?:X\d+)?)\s+(.+)(?<![\sX])\s+(\d+(?:\.\d+)?)(?>\s+M)?$';
  3. [Collections.ArrayList]$out = @();
  4.       
  5. forEach ( $f In (dir $fd -Filter *.prt) ){
  6.     $flag = $false;
  7.     $name = $f.BaseName.ToUpper();
  8.     $name = $name -replace '^(....)(....)(....)(.....)(.+)$', '$1-$2-$3-$4-$5';
  9.     forEach ( $s In @(gc $f.FullName) ){
  10.         if ( $s -match $reg ){
  11.             if ( $flag ){
  12.                 [void]$out.Add( '"' + ($arr -join '","') + '"' );
  13.             }
  14.             $arr = @( '', '', '', '', '', $name );
  15.             for ( $i=1; $i -le 5; $i++ ){ $arr[$i-1] = $matches[$i].Replace('"', '""'); }
  16.             $flag = $true;
  17.         } elseif ( $s -match '^ {11}(\S.*)'){
  18.             $arr[1] += ' ' + $matches[1].Replace('"', '""');
  19.         }
  20.     }
  21.     if ( $flag ){
  22.        [void]$out.Add(  '"' + ($arr -join '","') + '"' );
  23.     }
  24. }
  25. sc 1.csv $out;
复制代码
个别文件描述列本身包含了双引号,比如:mmdiv710ds22lr0121.prt,格式发生错乱
已修改。
1

评分人数

    • jave000: 大神代码,只看懂一点点技术 + 1

TOP

返回列表