Board logo

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

作者: hgx126    时间: 2008-10-25 16:01     标题: 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太慢,技术含量也不高 ^-^ 。
作者: pusofalse    时间: 2008-10-25 17:53

  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?
作者: hgx126    时间: 2008-10-25 21:12

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

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

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
复制代码





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