标题: [文本处理] 【已解决】批处理写入txt文本如何让每行两部分文字左右都对齐 [打印本页]
作者: Lumiere 时间: 2013-8-26 02:32 标题: 【已解决】批处理写入txt文本如何让每行两部分文字左右都对齐
本帖最后由 Lumiere 于 2013-8-26 22:10 编辑
RT,不知道有没有简单的批处理脚本能够实现输入的文字在txt文本视图中成左右都对齐?
比如一般用重定向写入文本都是在左边的,随便举个例子- for /l %%a in (1 1 10) do echo www.bathome.net %%a>>1.txt
复制代码
代码执行后生成十行,因为每行文字很短,所以都排在左边对齐,左边的www.bathome.net部分内容不定,长短不一,也不是由上面代码生成的,只是举个例子。如果存在好几列的情况下怎么让左边左对齐,而数字右边对齐,应该怎么写代码呢?我想应该批处理脚本是可以实现的吧?如果不行的话应该怎么办呢?
作者: PowerShell 时间: 2013-8-26 09:46
写脚本,在两个字符串中间插入经过计算的空格数量吧,
或者把文本导入excel。这种方法分两步走,
1 制作excel模版文件
2 向excel表写入数据。
这两步都可以用powershell实现。不过,一般只用powershell向excel写数据,而excel模版可以手动做。
作者: Lumiere 时间: 2013-8-26 12:04
回复 2# PowerShell
版主你太厉害了,我只会一些比较简单的bat脚本,你说计算空格这个算懂,但是因为每一行不一样,我给的例子每行都是www.bathome.net,而实际要排版的文本内容很不一样有长有短,但是都占不到一行,所以这个空格就无法统一了。不知道代码如何实现?还有,用批处理可以把文本导入excel文件吗?如果可以能不能告诉我怎么弄呢?
作者: DAIC 时间: 2013-8-26 13:49
- @echo off
- >1.csv echo www.bathome.net
- >>1.csv echo 2013
- >>1.csv echo www
- >>1.csv echo 8
- >>1.csv echo bathome
- >>1.csv echo 26
- >>1.csv echo net
复制代码
作者: Lumiere 时间: 2013-8-26 14:20
回复 4# DAIC
你这个批处理用到其他脚本了吗?前面的1.cvs看不懂
作者: PowerShell 时间: 2013-8-26 14:39
我只会一些比较简单的bat脚本,大多数问题我都用powershell解决。
逻辑如下,
1 取一行
2 把多个空格替换成1个空格
3 把这行按空格,切割成一个数组
4 统计数组中每个元素的长度,求和
5 每列要插入的空格数 =(行长度 - 上述列长度和) / (列 - 1 )
数组元素1 + 每列要插入的空格 + 数数组元素2 + 每列要插入的空格数 等等
可以用powershell向excel写数据
作者: DAIC 时间: 2013-8-26 14:43
回复 5# Lumiere
保存为bat文件,执行。它会生成一个文件叫做1.csv,双击这个文件,默认会用Excel打开。
作者: terse 时间: 2013-8-26 16:33
不知你每一列都对齐 还是就最后列对齐- @echo off&setlocal enabledelayedexpansion
- set /a len=n=0
- for /f "delims=" %%i in (test.txt) do (
- set s=%%i&set /a n+=1,m=0
- for %%j in (%%i) do (
- set s=%%j&set /a _len=1,m+=1
- for %%j in (256 128 64 32 16 8 4 2 1) do (
- if "!s:~%%j!" neq "" set /a _len+=%%j&set "s=!s:~%%j!"
- )
- for %%k in (!m!) do if !len%%k! lss !_len! set len%%k=!_len!
- set $!n!_!m!=%%j
- if !len! lss !_len! set len=!_len!
- )
- set #!n!=!m!
- )
-
- for /L %%i in (1,1,!len!) do set "k= !k!"
- for /L %%i in (1,1,!n!) do (
- set "str="
- for /L %%j in (1,1,!#%%i!) do (
- for %%k in (!len%%j!) do (
- if %%j neq 1 (
- set "s=!k!!$%%i_%%j!"
- set "str=!str! !s:~-%%k!"
-
- ) else (
- set "s=!$%%i_%%j!!k!"
- set "str=!str! !s:~,%%k!"
- )
- )
- )
- echo!str!
- )
- pause
复制代码
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |