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

[文本处理] txt转csv对于长数字如何不以科学计数法显示

本帖最后由 pcl_test 于 2016-8-25 17:56 编辑

txt转csv的问题
一目录下有许多文本文件,格式相同,其中一个内容如下:
例将下面:

5426|47960000132016|88130097408157|0|88130140097408134|45000.0|张三|
5426|48320000038190|88130097413071|0|88130140097413048|10000.0|李四|
5426|48360000105672|88130097505153|0|88130140097505130|2220.0|王老五|

用批处理此文本文件转换为Excel的csv.文件,我写如下代码:

@echo off
for %%a in (*.txt) do (
for /f "delims=" %%h in (%%a) do (
set var=%%h
setlocal enabledelayedexpansion
set var=!var:^|=,!
echo.!var!>>"%%~na_new%%.csv"
endlocal
)
)
pause

[转换成功了,可打开csv文件后,凡单元格内数字位数超过11位的数字全部成了科学计数。
我现在要做的是在数字位数超过11位的数字前加一个单引号“'”(本例中的第二、三、五列-以逗号为分隔符),转换成如下:

5426,'47960000132016,'88130097408157,0,'88130140097408134,45000.0,张三,
5426,'48320000038190,'88130097413071,0,'88130140097413048,10000.0,李四,
5426,'48360000105672,'88130097505153,0,'88130140097505130,2220.0,王老五,

请教代码如何写?
         -用批处理,不用Excel,因文件太多,用excel太慢,技术含量也不高 ^-^ 。

  1. @echo off
  2. for %%a in (*.txt) do (
  3.       for /f "usebackq tokens=1-7 delims=|" %%i in ("%%a") do (
  4.            >>"%%~na_new.csv" echo %%i,'%%j,'%%k,%%l,'%%m,%%n,%%o,
  5. ))
  6. pause
复制代码
楼主的%%~na_new%%.csv这种写法是否写错了?new之后会多出一个百分号%,是否应该是%%~na_new.csv?
心绪平和,眼藏静谧。

TOP

不好意思,的确new之后的"%%"是多余的。

开始我也想过用“|”作分隔符,然后加以逗号区分,但一心只想通过批批处理超过计算数字位数来添加单引号,没多想。想不到这么容易就做到了。实在感谢pusofalse版主。

TOP

sed一句搞定。。。
  1. @echo off
  2. for %%a in (*.txt) do >"%%~na_new.csv" sed "s/|/,/g;s/,\([0-9]\{11,\}\)/,'\1/g" "%%~a"
  3. pause
复制代码
心绪平和,眼藏静谧。

TOP

返回列表