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

[文本处理] 【已解决】将一个文本里多个特定的字符串依次替换成另一个文本中列出的多行内容

本帖最后由 6508as 于 2016-10-31 10:36 编辑

a.txt文件内容如下:
  TRACK 01 AUDIO
    TITLE "Track01"
    PERFORMER "未知艺术家"
    FLAGS DCP
    INDEX 01 00:00:00
  TRACK 02 AUDIO
    TITLE "Track02"
    PERFORMER "未知艺术家"
    FLAGS DCP
    INDEX 00 04:04:51
    INDEX 01 04:06:51
  TRACK 03 AUDIO
    TITLE "Track03"
    PERFORMER "未知艺术家"
    FLAGS DCP
    INDEX 00 08:51:11
    INDEX 01 08:53:11
  TRACK 04 AUDIO
    TITLE "Track04"
    PERFORMER "未知艺术家"
    FLAGS DCP
    INDEX 00 13:43:47
    INDEX 01 13:45:47

b.txt文件内容如下:
01.第一首歌曲名
02.第二首歌曲名
03.第三首歌曲名
04.第四首歌曲名


要求:把a.txt里的 “Track01”   替换为 b.txt 里的  “01.第一首歌曲名”
         把a.txt里的 “Track02”   替换为 b.txt 里的  “02.第二首歌曲名”
         把a.txt里的 ”Track03”   替换为 b.txt 里的  “03.第三首歌曲名”
         把a.txt里的 “Track04”   替换为 b.txt 里的  “04.第四首歌曲名”


替换后的结果如下:
c.txt文件内容如下:
  TRACK 01 AUDIO
    TITLE "01.第一首歌曲名"
    PERFORMER "未知艺术家 "
    FLAGS DCP
    INDEX 01 00:00:00
  TRACK 02 AUDIO
    TITLE "02.第二首歌曲名"
    PERFORMER "未知艺术家"
    FLAGS DCP
    INDEX 00 04:04:51
    INDEX 01 04:06:51
  TRACK 03 AUDIO
    TITLE "03.第三首歌曲名"
    PERFORMER "未知艺术家"
    FLAGS DCP
    INDEX 00 08:51:11
    INDEX 01 08:53:11
  TRACK 04 AUDIO
    TITLE "04.第四首歌曲名"
    PERFORMER "未知艺术家"
    FLAGS DCP
    INDEX 00 13:43:47
    INDEX 01 13:45:47

不知道能否实现?看了一些贴,大多是替换某一字符的,
如果能实现还望高手们不吝赐教,谢谢!
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

本帖最后由 6508as 于 2016-10-31 10:51 编辑

非常感谢 WHY 热心及时的回答,在这里向您表示真心的感谢!祝您天天好心情!事事顺心!

TOP

  1. gawk "{if(match($0,/^(\s*TITLE\s+\").*(\")$/,a)){getline s<\"b.txt\";$0=a[1]s\"\"a[2]}};1" a.txt
复制代码
1

评分人数

TOP

本帖最后由 WHY 于 2016-11-8 20:02 编辑
  1. set "s=[IO.File]::ReadAllText('a.txt', [Text.Encoding]::Default)"
  2. PowerShell -c "$a=type 'b.txt';[regex]::Replace(%s%, '(?im)(?<=^\s*TITLE\s+\").*?(?=\")',{$a[$global:i++]})"
复制代码

TOP

本帖最后由 WHY 于 2016-10-28 22:41 编辑

居然搞错了...
  1. @echo off & setlocal enabledelayedexpansion
  2. (for /f "delims=" %%i in (a.txt) do (
  3.     for /f %%j in ("%%i") do (
  4.         if "%%j" == "TITLE" (set "s=" & set /p "s=" & echo;  %%j "!s!") else echo;%%i
  5.     )
  6. ))<b.txt>c.txt
复制代码

TOP

本帖最后由 6508as 于 2016-10-31 10:42 编辑

非常感谢pcl_test版主的帮助!代码很好 祝事事顺心如意!!!
1

评分人数

TOP

本帖最后由 pcl_test 于 2016-10-28 22:00 编辑
  1. //&cls&cscript -nologo -e:jscript "%~f0"&pause&exit
  2. var fso=new ActiveXObject('Scripting.FileSystemObject'),b=[],n=0;
  3. var b=fso.OpenTextFile('b.txt',1).ReadAll().split(/[\r\n]+/);
  4. var a=fso.OpenTextFile('a.txt',1).ReadAll();
  5. var a=a.replace(/\b(TITLE\s*?)".*"/g,function($0,$1){
  6.     n++;
  7.     return b[n-1]?$1+'"'+b[n-1]+'"':$0;
  8. })
  9. WSH.echo(a);
复制代码
  1. rem win7及以上系统运行
  2. powershell -c "$n=0;$b=gc 'b.txt';gc 'a.txt'|%%{if($_ -match '^\s*?TITLE\s*?\".*\"'){if($b[$n]){$_ -replace '\".*\"\s*$',$b[$n];}else{$_};$n++;}else{$_}}"
  3. pause
复制代码
  1. rem 第三方http://www.bathome.net/s/tool/index.html?down&key=gawk
  2. gawk "NR==FNR{b[NR]=$0;next}/^\s*TITLE\s*\".*\"/{t++;if(b[t])sub(/\".*\"/,\"\x22\"b[t]\"\x22\")}1" "b.txt" "a.txt"
  3. pause
复制代码
1

评分人数

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in ('type "b.txt"') do set /a n+=1&set "#!n!=%%a"
  3. set n=0
  4. for /f "delims=" %%a in ('type "a.txt"') do (
  5.     set "str=%%a"
  6.     if "!str:TITLE=!" neq "!str!" (
  7.         set /a n+=1
  8.         if defined #!n! (
  9.             call echo;    TITLE "%%#!n!%%"
  10.         ) else echo;%%a
  11.     ) else echo;%%a
  12. )
  13. pause
复制代码
1

评分人数

TOP

返回列表