Home |
Search |
Today's Posts |
#4
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
I've revised the macro slightly so you only need one temporary text file
instead of the series of files. I call it "testWrite.txt". Create this as a blank text file before you run the macro the first time. Public Const SaveDir As String = "C:\Documents and Settings\shockley\Desktop\" Sub Macro1() Set fso = CreateObject("Scripting.FileSystemObject") Set oSourceFile = fso.GetFile(SaveDir & "testSource.txt") Set tsRead = oSourceFile.OpenAsTextStream(ForReading, TristateUseDefault) Do x = x + 1 Set oWriteFile = fso.GetFile(SaveDir & "testWrite.txt") Set tsWrite = oWriteFile.OpenAsTextStream(ForWriting, TristateUseDefault) LineCount = 0 Do sTest = tsRead.ReadLine tsWrite.WriteLine sTest LineCount = LineCount + 1 If tsRead.AtEndOfStream Then Exit Do Loop Until LineCount = 65536 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, x), .Cells(iRow, x)) End With rngDest.Value = rngSource.Value End If End With wbk.Close SaveChanges:=False tsWrite.Close Set tsWrite = Nothing Loop Until LineCount < 65536 rngDest.Cells(iRow + 1) = " " End Sub "shockley" wrote in message ... Larry, Here's a way to do it using FileSystemObject. I am calling the source file "TestSource.txt" and I have 4 extra text files in the same folder called "test01.txt", "test02.txt", "test03.txt", and "test04.txt". Make as many of these as you need to split the original source file into separate files of max 65536 lines. There may be some minor bugs and some special cases where it doesn't work exactly right, but the general idea is there and you should be able to modify it to your needs. You may have to add a reference for Microsoft Scripting Runtime. You can get help on the FileSystemObject and related properties and methods he http://msdn.microsoft.com/library/de...us/vbenlr98/ht ml/vaobjfilesystemobject.asp HTH, Shockley Public Const SaveDir As String = "C:\Documents and Settings\shockley\Desktop\" Sub Macro1() Set fso = CreateObject("Scripting.FileSystemObject") Set oSourceFile = fso.GetFile(SaveDir & "testSource.txt") Set tsRead = oSourceFile.OpenAsTextStream(ForReading, TristateUseDefault) Do x = x + 1 Set oWriteFile = fso.GetFile(SaveDir & "test0" & x & ".txt") Set tsWrite = oWriteFile.OpenAsTextStream(ForWriting, TristateUseDefault) LineCount = 0 Do sTest = tsRead.ReadLine tsWrite.WriteLine sTest LineCount = LineCount + 1 If tsRead.AtEndOfStream Then Exit Do Loop Until LineCount = 65536 Workbooks.OpenText _ FileName:=SaveDir & "test0" & x & ".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 - 1 Set rngSource = Range(.Cells(1, 1), .Cells(iRow, 1)) With ThisWorkbook.Sheets(1) Set rngDest = Range(.Cells(1, x), .Cells(iRow, x)) End With rngDest.Value = rngSource.Value End If End With wbk.Close SaveChanges:=False Loop Until LineCount < 65536 rngDest.Cells(iRow + 1) = " " End Sub "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 |
Thread Tools | Search this Thread |
Display Modes | |
|
|
![]() |
||||
Thread | Forum | |||
Can I import text file of cash flow to excel file then use formula | Excel Discussion (Misc queries) | |||
Set Defaults in File Import of a Text File | Excel Worksheet Functions | |||
Would Like to Automate Batch File Creation and Text FIle Import | Excel Discussion (Misc queries) | |||
excel - create a macro to use cell text as part of a file name | New Users to Excel | |||
Get External Data, Import Text File, File name problem | Excel Programming |