中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
« [1] [2] »
作者:
标题: 将文档内容,横列变为纵列 上一主题 | 下一主题
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『楼 主』:  将文档内容,横列变为纵列

将文本纵向显示.

a.txt内容如下:
a b c d e f
h i j k l m n
1 2 3 4 5
6 7 8 9 10 11 12 13 14 15
a s d
11 12 13 14 15

要求输出结果如下
a h 1 6 a 11
b i 2 7 s 12
c j 3 8 d 13
d k 4 9   14
e l 5 10  15
f m   11
  n   12
      13
      14
      15



致精致简!
2007-8-20 04:04
查看资料  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 2 楼』:  

BAT我觉得不能实现,或者说很难实现。
脚本的话,定义个2维数组,然后转置输出即可。

2007-8-20 08:17
查看资料  发短消息 网志   编辑帖子  回复  引用回复
youxi01
高级用户




积分 846
发帖 247
注册 2006-10-27
来自 湖南==》广东
状态 离线
『第 3 楼』:  

效率是比较低的了:
@echo off
for /f "delims=" %%i in (test.txt) do (
   set /a n+=1
   call set "str%%n%%=%%i "
)

for /l %%i in (1 1 10) do call :join
pause>nul

:split obj
call set "var=%%%1%%"
if "%var%"=="" set "str=" &goto :eof
for %%i in (%var%) do (
  set "str=%%i"
  call set "%1=%%var:* =%%"
  goto :eof
)

:join
set "tmp="
for /l %%i in (1 1 %n%) do (
  call :split str%%i
  call set tmp=%%tmp%% %%str%%
)
echo.%tmp%


   此帖被 +3 点积分     点击查看详情   
评分人:【 slore 分数: +3  时间:2007-8-20 12:22


2007-8-20 11:39
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 4 楼』:  

没想到P的代码也不是很复杂……我把VBS的也贴上吧

Const ForReading = 1
Const ForWriting = 2
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("In.txt",ForReading)

Dim InputStr,lineIndex,TempArr,OutArr(100,100)

Do Until objFile.AtEndOfStream
    InputStr = objFile.ReadLine
   
TempArr = Split(InputStr," ")
   
If UBound(TempArr) > MaxY Then MaxY = UBound(TempArr)
   
For i = 0 To UBound(TempArr)
        
OutArr(lineIndex,i) = TempArr(i)
   
Next
   
lineIndex = lineIndex + 1
Loop

objFile.Close
Set
objFile = objFSO.OpenTextFile("Out.txt",ForWriting,True)
For i = 0 To MaxY
    For j = 0 To lineIndex - 1
        If OutArr(j,i) = "" Then OutArr(j,i) = " "
        OutStr = OutStr & OutArr(j,i) & " "
    Next
   
objFile.WriteLine OutStr
    OutStr = ""
Next
objFile.Close

Set
objFile = Nothing
Set
objFSO = Nothing
a h 1 6 a 11
b i 2 7 s 12
c j 3 8 d 13
d k 4 9   14
e l 5 10   15
f m   11     
  n   12     
      13     
      14     
      15     


2007-8-20 12:24
查看资料  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 5 楼』:  

  来段效率高点的代码,通过构造数组来实现,没有考虑特殊情况:
@echo off
:: 注意: set /p= 语句<nul前的空格是跳格键,在论坛中会被转换为空格
:: 复制下来之后,请重新手工设置跳格,否则,将不能起到对齐的效果。
set /a num=0,_num=0,max=0
setlocal enabledelayedexpansion
for /f "delims=" %%i in (test.txt) do (
    set /a num+=1,_num=0
    for %%j in (%%i) do (
        set /a _num+=1
        set str!num!_!_num!=%%j
        if !_num! geq !max! set max=!_num!
    )
)
for /l %%i in (1,1,%max%) do (
    for /l %%j in (1,1,%num%) do (
       set /p=!str%%j_%%i!        <nul
    )
    echo.
)
pause
[ Last edited by namejm on 2007-8-20 at 06:06 PM ]

   此帖被 +12 点积分        点击查看详情   
评分人:【 youxi01 分数: +8  时间:2007-8-20 13:43
评分人:【 HAT 分数: +4  时间:2007-8-20 13:49




尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2007-8-20 12:56
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 6 楼』:  

数组用的妙
学习

2007-8-20 13:47
查看资料  发短消息 网志   编辑帖子  回复  引用回复
youxi01
高级用户




积分 846
发帖 247
注册 2006-10-27
来自 湖南==》广东
状态 离线
『第 7 楼』:  

楼上的不错,不过还有点点问题,我乱想的,提出来而已,错了别见怪啊
如果行数超过了10行的时候,怎么办?
根据你的思路:str111它要如何去识别?
当%%i取1 %%j取11的时候可以为str111
当%%i取11 %%j取1的时候,还是str111,这样是不是有点矛盾拉?
将str111这样的表达形式改为str1101的形式可以好点吧?!

2007-8-20 13:48
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 8 楼』:  

  本来行和列之间是有下划线连接的,发出来的时候,嫌_!_num!的格式不好看,没考虑太多,就临时去掉了,还是补回去吧。



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2007-8-20 13:57
查看资料  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 9 楼』:  

还是脚本里数组好用嗬

2007-8-20 14:10
查看资料  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 10 楼』:  

namejm 版主
你的下划线还是没显示出来啊
输出格式还是很不整齐,这也正是我昨晚卡壳的地方.
我的思路是,在设变量前,先判断该变量有几个字符,来决定该在前面加几个空格.
其实应该不难,但怎么就是搞不对.



致精致简!
2007-8-20 14:43
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 11 楼』:  

//我的思路是,在设变量前,先判断该变量有几个字符,来决定该在前面加几个空格.

那岂不是要再加for循环
时间复杂度要变成O(n的3次方)啦

2007-8-20 14:56
查看资料  发短消息 网志   编辑帖子  回复  引用回复
youxi01
高级用户




积分 846
发帖 247
注册 2006-10-27
来自 湖南==》广东
状态 离线
『第 12 楼』:  

对齐不是难点,用空格补齐就行了

2007-8-20 15:35
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 13 楼』:  

问题是如何加?
我想了很久都没加上去



致精致简!
2007-8-20 15:54
查看资料  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 14 楼』:  

你每个 单位字的长度没有什么限制……

如果:
1 128312718478 2 sd gadf
adfdfsf  23 dfsdfsdfsd 0 12 12 44 5 2 35
12312 1 2423 45345 32323
1 2 3 4 5 6 7 8 9 10
长的和短的差很多,还是不好排版的(即便用TAB字符也一样不好对齐)。

2007-8-20 15:56
查看资料  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 15 楼』:  



  Quote:
Originally posted by slore at 2007-8-20 15:56:
你每个 单位字的长度没有什么限制……

我现在的a.txt内容全是单个字符,且全用空格分开的.



致精致简!
2007-8-20 16:07
查看资料  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: