找回密码
 注册
Simdroid-非首页
查看: 121|回复: 6

[基础概念] 怎样读入 多个 文本文档的指定行,然后 输出到一个文档

[复制链接]
发表于 2011-7-19 00:14:38 | 显示全部楼层 |阅读模式 来自 浙江嘉兴
本帖最后由 weichanghe2000 于 2011-7-19 00:17 编辑

大家好,假如我由软件 仿真 产生了 大量的 文本文档,放在电脑里的 a目录。

为了查看和搜索方便,我想用 mathematica 读入 这些文件的第2行到文件末尾,然后 按照这n个文件产生的时间顺序 将其顺序输出到一个文档。

举个例子,我在 a目录下 有1.txt (产生时间2011.7.18_20:00),2.txt (产生时间2011.7.18_20:01),3.txt (产生时间2011.7.18_20:02),4.txt (产生时间2011.7.18_20:03),…………n.txt(产生时间2011.7.18_22:00).

现在我想把 这n 个文本文档 的第2行到末尾,存放到 一个新的文档 b.txt中:首先存放 1.txt的第2行到最后一行,再存放 2.txt的第2行到最后一行,…………最后存放的是n.txt的第2行到最后一行。

怎样实现?恳请大家指导,谢谢。
发表于 2011-7-19 20:59:07 | 显示全部楼层 来自 北京
Simdroid开发平台
首先,设置你的工作目录
  1. SetDirectory["C:\\test"]
复制代码
获得你的文件列表
  1. files = FileNames[]
复制代码
然后按照修改时间排序
  1. files2 = Sort[files,
  2.   DateDifference @@ (Function[{x},
  3.         DateString[FileDate[x, "Modification"]]] /@ {#1, #2}) > 0 &]
复制代码
回复 不支持

使用道具 举报

发表于 2011-7-19 21:30:26 | 显示全部楼层 来自 北京
接下来,是文件处理。如果是中文,处理起来比较很麻烦。

因为Mathematica对非Ascii的存储是按照unicode编码实现的,对于中文字符文件,它处理起来很困难,因此,你要先保证你的文件是Unicode编码的,这很重要。

然后,你要用二进制方式进行文件读取。
  1. Function[{x},
  2.   FromCharacterCode[BinaryReadList[x, "UnsignedInteger16"],
  3.    "Unicode"]] /@ files2
复制代码
注意,一定要是Unicode编码,而且不能是Big Endian。
回复 不支持

使用道具 举报

发表于 2011-7-19 21:36:09 | 显示全部楼层 来自 北京
然后就很简单的字符串处理了。
  1. txt2 = StringJoin@Flatten[StringSplit[#, "\n"][[2 ;; -1]] & /@ txt]
复制代码
然后存储就好了
  1. BinaryWrite["res.txt", ToCharacterCode[txt2], "UnsignedInteger16"]
复制代码
回复 不支持

使用道具 举报

 楼主| 发表于 2011-7-19 23:33:29 | 显示全部楼层 来自 上海浦东新区
本帖最后由 weichanghe2000 于 2011-7-20 00:29 编辑
接下来,是文件处理。如果是中文,处理起来比较很麻烦。

因为Mathematica对非Ascii的存储是按照unicode编码实现的,对于中文字符文件,它处理起来很困难,因此,你要先保证你的文件是Unicode编码的,这很重要。
...
guocong89 发表于 2011-7-19 21:30

应该是
  1. txt=Function[{x},
  2. FromCharacterCode[BinaryReadList[x, "UnsignedInteger16"],
  3. "Unicode"]] /@ files2
复制代码
吧?
回复 不支持

使用道具 举报

 楼主| 发表于 2011-7-19 23:45:21 | 显示全部楼层 来自 上海浦东新区
本帖最后由 weichanghe2000 于 2011-7-20 00:27 编辑

谢谢这么详细的解答啦。

顺便问下:
  1. txt2 = StringJoin@Flatten[StringSplit[#, "\n"][[2 ;; -1]] & /@ txt]
复制代码

中的[[2 ;; -1]]是什么意思?
回复 不支持

使用道具 举报

发表于 2011-7-20 00:01:12 | 显示全部楼层 来自 北京
6# weichanghe2000
2表示从第二行开始,-1表示到倒数第一行;你参考下函数Part的帮助
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-5-4 13:08 , Processed in 0.042400 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表