我已经下载了一个数据集,其中详细列出了1979年1月至2004年12月期间在英格兰报告的所有车祸 - 该文件采用csv格式,可以理解为非常大(确切地说是6,224,199行)。由于文件的大小超过了Excel 2010可以处理的行数,因此我必须将文件拆分为较小的文件,以便在Excel中一次打开它。我尝试使用Notepad和Notepad ++,但记事本崩溃,而Notepad ++拒绝打开如此大的(720MB)文件。我考虑使用Excel 替换之类的Delimit,但它不支持宏。 现在,忽略大小问题,我需要计算每个月的崩溃总数并记下它们。有一列用于指定每次崩溃的日期,但行不是根据崩溃日期排序的。我正在考虑使用CTRL + F计算具有特定月/年值的行数,然后记录每次搜索的结果数,但考虑到数据跨越25年,我必须手动搜索和记录300个月的结果。
答案 0 :(得分:0)
我同意Jeanno和Brad,对于这种类型的要求,Access是比Excel更好的工具。但是,我想知道尝试用Excel读取这么大的文件是否会有一个实际的持续时间。
我连接了一些大型文本文件以创建一个663 Mb的文件,我认为它足够接近。下面的宏读取文件的每一行并将其拆分为准备分析的字段。注意:我的文件使用" |"作为分隔符而不是","。
宏在100多秒内读取7,782,013条记录。访问仍然是更好的选择,但如果Access不可用,则Excel是可行的。
注意:此宏需要引用" Microsoft Scripting Runtime"。
Sub ReadAndSplit()
Dim FileStream As TextStream
Dim FileSysObj As FileSystemObject
Dim Line As String
Dim LinePart() As String
Dim NumLines As Long
Dim TimeStart As Double
TimeStart = Timer
Set FileSysObj = CreateObject("Scripting.FileSystemObject")
NumLines = 0
' 1 means open read only
Set FileStream = FileSysObj.OpenTextFile(ThisWorkbook.Path & "\Test4.txt", 1)
Do While Not FileStream.AtEndOfStream
Line = FileStream.ReadLine
NumLines = NumLines + 1
LinePart = Split(Line, "|")
Loop
FileStream.Close
Debug.Print NumLines
Debug.Print Timer - TimeStart
End Sub