乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 99|回复: 7

一个txt文件有多少行?

[复制链接]

14

主题

78

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
134
发表于 2007-10-29 11:24:31 | 显示全部楼层 |阅读模式
我想将任意txt文件的行读取到字符串数组中。但我不想使用Redim保留,也不想打开文件两次:一次用于计数行数,然后在使用其索引的行数声明字符串数组后再次打开,以便将文本行读取到该数组中。应该有一个“清洁”方法。
我的问题:是否有返回行数的标准函数?

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

14

主题

78

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
134
发表于 2007-10-29 12:03:21 | 显示全部楼层
以前从没见过劈叉。事实上,这个解决方案需要最少的编码。谢谢!
回复

使用道具 举报

6

主题

103

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
127
发表于 2007-10-29 14:20:33 | 显示全部楼层

虽然我很欣赏它的简洁,但这并不是最少的代码,但是性能非常好——即使是在非常大的文件上。
对一个包含64,000行文本(每行128个字符)的文本文件的快速测试几乎是即时的。
就像我说的,我个人很有兴趣看到一个性能优于它的vba替代方案。
回复

使用道具 举报

14

主题

78

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
134
发表于 2007-10-29 14:29:47 | 显示全部楼层
这是我的2美分,部分是从MP
  1. Option Explicit
  2. Sub test()
  3.     Dim streams() As String
  4.     ''  please use a valid path in the following
  5.     ''  btw size of localldd.txt is 45.6 Mb
  6.     ''  you can get this file from:
  7.     ''  http://www.gomr.mms.gov/homepg/pubinfo/freeasci/pipeline/freepipe.html
  8.     streams = FileToArray("D:\VBA_TEST\localldd.txt")
  9.    
  10.     Debug.Print (UBound(streams) - LBound(streams)) + 1; "line(s) of text retrieved."
  11. End Sub
  12. Function FileToArray(fName As String) As String()
  13.     Dim txt As String
  14.     Dim fs As Object
  15.     Dim fl As Object
  16.     Set fs = CreateObject("Scripting.FileSystemObject")
  17.     Set fl = fs.OpenTextFile(fName)
  18.     txt = fl.ReadAll
  19.     fl.Close
  20.     FileToArray = Split(txt, vbCr)
  21. End Function

~'J'~
回复

使用道具 举报

6

主题

103

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
127
发表于 2007-10-29 14:57:23 | 显示全部楼层
干杯~
回复

使用道具 举报

14

主题

78

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
134
发表于 2007-10-30 21:48:08 | 显示全部楼层

嘿伙计们
这真的很酷!
我知道这显然是必要的,否则就不会提出这个问题,但我想知道我该如何阐述这个问题?谢谢马克
回复

使用道具 举报

14

主题

78

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
134
发表于 2007-10-31 07:26:32 | 显示全部楼层

哦,胖子,还有,为什么是+1?
标记
回复

使用道具 举报

14

主题

78

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
134
发表于 2007-10-31 12:24:46 | 显示全部楼层
连我都可以回答
假设,你声明了一个数组MyArray (0到4)。那么LBound = 0,UBound = 4。
显然,4 - 0 = 4。然而,该数组可以保存5个值(索引范围= 0 1 2 3 4)。
因此出现了“+ 1”。
很高兴能为您服务
我提问的原因是为了获得最高速度。所以我希望最小的内存/值重新分配(Redim Preserve)和/或硬盘活动(打开/读取一个文件两次)。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-5 17:03 , Processed in 0.704154 second(s), 69 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表