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

[文本处理] [已解决]批处理怎样实现矩阵转置和文本提取?

下面两个问题可以用gawk或者sed解决吗?批处理也行。
--------------------
a) 矩阵转置
--------------------
有矩阵如下

1 2 3 4
5 6 7 8
a b c d
e f g h

转换成
1 5 a f
2 6 b f
3 7 c g
4 8 d h

--------------------
b)合并文件
--------------------
一文件如下

1 2 3
4 5 6
7 8 9

另一文件中有
1
3
5

合并成另一文件
1 2 3 1
4 5 6 3
7 8 9 5

[ 本帖最后由 sxw 于 2010-12-12 22:54 编辑 ]
1

评分人数

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

转换:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in (1.txt) do (
  3.     set n=0
  4.     for %%b in (%%a) do (
  5.         set/a n+=1
  6.         for %%c in (!n!) do set #%%c=!#%%c! %%b
  7. ))
  8. (for /l %%a in (1,1,%n%) do echo!#%%a!)>3.txt
复制代码
合并:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in (1.txt) do (
  3.     set/a n+=1
  4.     set #!n!=%%a
  5. )
  6. (for /f "delims=" %%a in (2.txt) do (
  7.     set/a m+=1
  8.     for %%b in (!m!) do echo %%a !#%%b!
  9. ))>3.txt
复制代码
也可以:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1* delims=:" %%a in ('findstr /n .* 1.txt') do set #%%a=%%b
  3. (for /f "tokens=1* delims=:" %%a in ('findstr /n .* 2.txt') do echo %%b !#%%a!)>3.txt
复制代码
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

Originally posted by 740011611 at 2010-12-8 13:12:
nothing 呵呵
想追问一下如果是汉字怎么转置,比如把下面的诗转置?

         将进酒—李白
君不见,黄河之水天上来,奔流到海不复回。
君不见,高堂明镜悲白发,朝如青丝暮成雪。
人生得意须尽欢,莫使金樽空对月。
天生我材必有用,千金散尽还复来。
烹羊宰牛且为乐,会须一饮三百杯。
岑夫子,丹丘生,将进酒,杯莫停。
与君歌一曲,请君为我侧耳听:
钟鼓馔玉不足贵,但愿长醉不复醒。
古来圣贤皆寂寞,唯有饮者留其名。
陈王昔时宴平乐,斗酒十千恣欢谑。
主人何为言少钱,径须沽取对君酌。
五花马,千金裘,呼儿将出换美酒,
与尔同销万古愁。


转成

    君 . .                                       
     不 . .
     见 . .
将  黄
进  河
酒  之
|    水
李  天
白  上
    来
    ,
    奔
    流
    到
    海
    不
    复
    回
        。

文本要求:不能使用空格,只能使用汉字空白符“ ”前对齐
  1.    将进酒—李白
  2. 君不见,黄河之水天上来,奔流到海不复回。
  3. 君不见,高堂明镜悲白发,朝如青丝暮成雪。
  4. 人生得意须尽欢,莫使金樽空对月。
  5. 天生我材必有用,千金散尽还复来。
  6. 烹羊宰牛且为乐,会须一饮三百杯。
  7. 岑夫子,丹丘生,将进酒,杯莫停。
  8. 与君歌一曲,请君为我侧耳听:
  9. 钟鼓馔玉不足贵,但愿长醉不复醒。
  10. 古来圣贤皆寂寞,唯有饮者留其名。
  11. 陈王昔时宴平乐,斗酒十千恣欢谑。
  12. 主人何为言少钱,径须沽取对君酌。
  13. 五花马,千金裘,呼儿将出换美酒,
  14. 与尔同销万古愁。
复制代码
批处理代码:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in (1.txt) do call:han "%%a"
  3. for /l %%a in (1,1,%Ye%) do set Xing= !Xing!
  4. for /f "delims=" %%a in (1.txt) do (
  5.         set Han=%%a%Xing%
  6.         for /l %%b in (0,1,%Ye%) do set #%%b=!#%%b! !Han:~%%b,1!
  7. )
  8. set/a Ye-=1
  9. (for /l %%a in (0,1,%Ye%) do echo !#%%a!)>3.txt
  10. exit
  11. :han
  12. set Han=%~1
  13. if defined Ye (set Gu=%Ye%) else set Gu=0
  14. :ye
  15. if "!Han:~%Gu%,1!"=="" (
  16.         if "%Ye%"=="" set Ye=%Gu%
  17.         if %Gu% gtr %Ye% set Ye=%Gu%
  18.         goto:eof
  19. )
  20. set/a Gu+=1
  21. goto:ye
复制代码
if defined Ye (set Gu=%Ye%) else set Gu=0用于加快子循环速度的
for /l %%a in (1,1,%Ye%) do set Xing= !Xing!用于补位,变量为连续的汉字空白符


如果不想空格分隔,则把
set #%%b=!#%%b! !Han:~%%b,1!
改成
set #%%b=!#%%b!!Han:~%%b,1!
如果要从右向左显示,则改成
set #%%b=!Han:~%%b,1! !#%%b!

set #%%b=!Han:~%%b,1!!#%%b!
1

评分人数

    • sxw: 乐于助人技术 + 1
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

返回列表