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

[文本处理] [已解决]批处理more命令打不开大文件?

本帖最后由 hucuibai 于 2011-4-12 10:15 编辑

我用more打开一个40多M的txt文档重定向到另外一个txt,输出的是空白,内容读不出来,这是为什么,more有限制功能还是怎么样??


文件我传不上来,太大了,每行的内容都是一致的,大致就是这样的
56128485220, 248053, 3, "2011-03-28 23:58:46", "2011-03-29 00:00:14", "119.1.17.209", 0, 0(有N行,这是程序产生的日志文件)
我就是想把这个文件的内容读出来,然后输入到另外一个文件里面,格式就是在每行内容上面加上(内容),文件是unicode编码的,我是目的就是要把这个文件的内容读出来,然后放到.sql文件里面去!


把源文件内容删了,留开头几行!上传上来

type、more、for等命令都是一行一行获取输入、处理、再输出的,所以单独使用的时候应该不会预先把文件内容读取到内存吧,不过for+命令是特例,必须先等待命令运行完毕,才能用for进行处理,所以我猜for从命令所获取的输入因该是暂存在内存里吧,cmd所能使用的内存是有上限的,所以会出现各种诡异现象。个人感觉,没有验证

TOP

53# zm900612


小文件是可以读出来的,可能是文件太大了,是不是因为for命令获取type输出的时间太久了

TOP

当for从文件读取输入时是一行一行进行,而从命令获取输入时是等该命令运行完毕后再进行,不知道for中的命令输出是存在内存里还是临时文件,我感觉应该是内存吧...

TOP

49# tmplinshi


我刚刚把你的那两个综合了一下,必须要产生一个零时文件过度一下,不然就在for循环里面使用type源文件不能输出,但是那些小文件就可以,for循环也有限制的?
  1. @echo off
  2. type PlayerPropertyLog20110329.txt>1.txt
  3. (for /f "delims=" %%i in (1.txt) do echo ^(%%i^)^,)>2.sql&&del /s /q 1.txt>nul
复制代码

TOP

50# hucuibai

运行以下代码,看文件行数是否一样:
  1. @echo off
  2. set file="40m.txt"
  3. type %file% >40m_type.txt
  4. echo 正在统计 %file% 行数...
  5. find /v /c "" %file%
  6. echo ================
  7. echo 正在统计 40m_type.txt 行数...
  8. find /v /c "" 40m_type.txt
  9. echo ================
  10. pause
复制代码

TOP

49# tmplinshi


亲爱的斑竹同志,我按照你的步骤从新做了一遍,结果还是不行,输出为0字节,cmd窗口没反应,就剩个光标在那闪,等了十来分钟还是0字节

下载附件,打开,全选,复制,再粘贴到文件末尾,再全选,复制,粘贴到文件末尾,再全选...
文件四十多M之后  我复制你的代码运行!会不会是我的系统跟你的系统不一样,我的是xp sp3

TOP

6# hucuibai


下载保存你的附件,打开,全选,复制,再粘贴到文件末尾,再全选,复制,粘贴到文件末尾,再全选...

TOP

5# tmplinshi


手工复制?日志文件有很多,而且都很大,还是你的意思是说你下载的时候是直接打开的然后复制里面的内容到新的txt文档 然后用你写的那个语句操作??

TOP

4# hucuibai


打开你的文件,复制里面的内容再粘贴到里面。

TOP

3# tmplinshi


你这个不行,你是下的我的源文件?不是复制的里面的内容新建的记事本吧?我的源文件是unicode编码,用你的这个不能输出!

TOP

本帖最后由 tmplinshi 于 2011-4-1 16:43 编辑

我打开你的附件,然后不停复制粘贴,把文件扩充到了 76 MB,然后进行了以下测试:
  1. type 76M.txt >76M_type.txt
  2. sort 76M.txt >76M_sort.txt
  3. :: 两个输出文件的行数与原文件都相同
复制代码
  1. @echo off
  2. (for /f "delims=" %%a in ('type 76M.txt') do echo ^(%%a^),)>new.txt
  3. :: 这个没有耐心等完,按 Ctrl+C 终止后,new.txt 有 400 多 KB。
复制代码

TOP

本帖最后由 hucuibai 于 2011-4-1 15:05 编辑
  1. @echo off
  2.             >456.sql (
  3.                 echo use !str2!^;
  4.                 echo insert into playerpropertylog^(列名^) values
  5.                 for /f "delims=" %%a in ('more %%i') do echo ^(%%a^)^,
  6.                      )
复制代码
用这段代码可以解决小文件,但是文件大了,more命令输出不了,用type sort 都不行

TOP

批处理将txt日志文件导入mysql数据库操作

附件里面是txt文件的一部分内容,源文件有四十多M,因为太大所有传不了那么多,我的需求就是把,这些数据读出来重定向到另外一个.sql文件里面,按照mysql插入数据的格式
use db_name
insert into table(a,b,c) values
(txt第一行内容),
(txt第二行内容),
    .
    .
    .
    .
(txt最后一行内容);

这样应该够清楚了吧!呵呵!大家帮忙看看!有什么好办法!

TOP

41# Batcher


我重新发个帖

TOP

返回列表