Board logo

标题: [文本处理] 【已解决】批处理写入txt文本如何让每行两部分文字左右都对齐 [打印本页]

作者: Lumiere    时间: 2013-8-26 02:32     标题: 【已解决】批处理写入txt文本如何让每行两部分文字左右都对齐

本帖最后由 Lumiere 于 2013-8-26 22:10 编辑

RT,不知道有没有简单的批处理脚本能够实现输入的文字在txt文本视图中成左右都对齐?
比如一般用重定向写入文本都是在左边的,随便举个例子
  1. 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

  1. @echo off
  2. >1.csv echo www.bathome.net
  3. >>1.csv echo 2013
  4. >>1.csv echo www
  5. >>1.csv echo 8
  6. >>1.csv echo bathome
  7. >>1.csv echo 26
  8. >>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

不知你每一列都对齐 还是就最后列对齐
  1. @echo off&setlocal enabledelayedexpansion
  2. set /a len=n=0
  3. for /f "delims=" %%i in (test.txt) do (
  4.     set s=%%i&set /a n+=1,m=0
  5. for %%j in (%%i)  do (
  6. set s=%%j&set /a _len=1,m+=1
  7. for %%j in (256 128 64 32 16 8 4 2 1) do (
  8. if "!s:~%%j!" neq "" set /a _len+=%%j&set "s=!s:~%%j!"
  9. )
  10. for %%k in (!m!) do if !len%%k! lss !_len! set len%%k=!_len!
  11. set $!n!_!m!=%%j
  12. if !len! lss !_len! set len=!_len!
  13. )
  14. set #!n!=!m!
  15. )
  16. for /L %%i in (1,1,!len!) do set "k= !k!"
  17. for /L %%i in (1,1,!n!) do (
  18. set "str="
  19. for /L %%j in (1,1,!#%%i!) do (
  20.                 for %%k in (!len%%j!) do (
  21. if %%j neq 1 (
  22. set "s=!k!!$%%i_%%j!"
  23. set "str=!str! !s:~-%%k!"
  24. ) else (
  25. set "s=!$%%i_%%j!!k!"
  26. set "str=!str! !s:~,%%k!"
  27. )
  28. )
  29. )
  30. echo!str!
  31. )
  32. pause
复制代码





欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2