Posted to microsoft.public.excel.programming
|
|
import part of a text file
Shockley --
I will probably use it after I write some code to strip the Y-values before
the import, to save perhaps more time.
Larry
"shockley" wrote in message
...
Larry,
You're quite welcome. I'm naturally a bit curious if it helps you at
all--I
wasn't sure if it would run fast enough.
For a source file with 65534 x-values, my macro, on my machine runs 7
seconds.
To simply open the file with Excel and copy into another workbook, as with
this code:
Sub Macro2()
BeginTime = Now
Set fso = CreateObject("Scripting.FileSystemObject")
Set oSourceFile = fso.GetFile(SaveDir & "testSource.txt")
Set tsRead = oSourceFile.OpenAsTextStream(ForReading,
TristateUseDefault)
Do
sTest = tsRead.ReadLine
LineCount = LineCount + 1
Cells(LineCount, 1) = sTest
If tsRead.AtEndOfStream Then Exit Do
Loop Until LineCount = 65536
Runtime = (Now - BeginTime) * 86400
ThisWorkbook.Sheets(1).Cells(1, 5) = Runtime
End Sub
it takes 3 seconds. But this code has the line count limitation.
To read the text file line by line and place each x-value in Excel, as
with
this code:
Sub Tester()
BeginTime = Now
Workbooks.OpenText _
FileName:=SaveDir & "testWrite.txt", _
Origin:=xlWindows, _
StartRow:=1, _
DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=True, _
Tab:=False, _
Semicolon:=False, _
Comma:=False, _
Space:=True, _
Other:=False, _
FieldInfo:=Array(Array(1, 1), _
Array(2, 1), Array(3, 1))
Set wbk = ActiveWorkbook
With wbk.Sheets(1)
Set rngEnd = .Cells(1, 1).End(xlDown)
If Not rngEnd Is Nothing Then
iRow = rngEnd.Row
Set rngSource = Range(.Cells(1, 1), .Cells(iRow, 1))
With ThisWorkbook.Sheets(1)
Set rngDest = Range(.Cells(1, 1), .Cells(iRow, 1))
End With
rngDest.Value = rngSource.Value
End If
End With
wbk.Close SaveChanges:=False
Runtime = (Now - BeginTime) * 86400
Cells(1, 5) = Runtime
End Sub
takes 23 seconds. So, my code is half as fast as the simplest,
line-count-limited method, but about 3 times as fast as the method you may
have tried.
Regards,
Shockley
"L Mehl" wrote in message
...
Shockley --
Thank you for the code. I appreciate all that effort.
Larry
"L Mehl" wrote in message
...
Another application creates text files which I import into a worksheet
for
further processing.
The text file looks like:
ARRAY 1 3023 <--3023 indicates how many X-values are in the file
#X-values, ...some more misc text ...
0.378228
0.737527
1.113739
1.488899
1.866231
2.257432
... more X-values
<--one space in this line
#Y-values
0.195559
0.152420
0.126161
0.199365
0.173638
... more Y-values
I need only the first 2 rows plus all the X-values (up to but not
including
the line containing one space.
There could be 65,500+ X-values, and line-by-line processing is slow
with
many values to import.
Is there a way in VBA to import a specified number of lines, without
using
a
line-by-line method?
expression.OpenText(...) has a StartRow parameter, but no "EndRow" as
far
as
I can tell.
Does anyone know of a text-file parsing program or a method which
could
be
used to write a program which could be called by VBA, to create a new
file
after stripping the rows below and including the line containing one
space?
Thanks for any help.
Larry Mehl
---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.600 / Virus Database: 381 - Release Date: 2/28/2004
---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.600 / Virus Database: 381 - Release Date: 2/28/2004
---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system ( http://www.grisoft.com).
Version: 6.0.600 / Virus Database: 381 - Release Date: 2/29/2004
|