Question

Modify a text file with Windows Batch or VB Script

Asked by: elwayisgod

I have a text file with 23 pipe delimited columns to it.  I need to do the following to it:

1-Eliminate columns 1, 3, 4, 7, 8, 9, 11
2-Then of remaining columns, move column 4 to column 2 thus moving 2 to 3 and 3 to 4.
3-Then concatenating columns 2 and 3 with a underscore.
4-Changing file from pipe delimited to tab delimited file
5-Removing all double quotes from file

I've attache a txt file that takes it through the steps from start to finish so you can see what I want to end up with

This Question has been solved and asker verified All Experts Exchange premium technology solutions are available to subscription members.

Subscribe now for full access to Experts Exchange and get

Instant Access to this Solution

  • Plus...
  • 30 Day FREE access, no risk, no obligation
  • Collaborate with the world's top tech experts
  • Unlimited access to our exclusive solution database
  • Never be left without tech help again

Subscribe Now

Asked On
2009-09-11 at 08:52:52ID24724960
Tags

Window Batch DOS VBSCript VB Script

Topics

Visual Basic Programming

,

Windows Batch Scripting

,

MS DOS

Participating Experts
4
Points
250
Comments
25

Trusted by hundreds of thousands everyday for fast, accurate and reliable tech support.

  • "The time we save is the biggest benefit of Experts Exchange to Warner Bros. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange." Mike Kapnisakis, Warner Bros.
  • "Our team likes having a resource that is more secure than just using Google and most experts using this service really know their stuff. It's nice to look here first versus using Google." Dayna Sellner, Lockheed Martin
  • "Anytime that I've been stumped with a problem, 9 out of 10 times Experts Exchange has either the accepted solution or an open discussion of the potential solution to the problem." Kenny Red, eBay Inc.

See what Experts Exchange can do for you.

Got a question?

We've got the answer.

Experts Exchange has been collecting answers to technology questions since 1996…3 million and counting! If you have a question, chances are we already have your answer.

Screenshot of Experts Exchange Knowledgebase

Need individual assistance?

Our experts are ready to help.

If you can't find the exact answer you're looking for, ask our exclusive community of 50,000 experts. You’ll get a personalized answer from a trusted professional.

Screenshot of Experts Exchange Knowledgebase

Want to learn from the best?

Read articles from industry experts.

Thousands of free tech tips, tricks, how-to’s and tutorials are available in our peer reviewed articles section. See for yourself how smart our experts are, no login required.

Screenshot of an Article

Working on a long term project?

Store your work and research.

Save solutions to your questions, answers you’ve discovered through searching plus helpful articles in your personal knowledgebase for easy future access.

Screenshot of Experts Exchange Knowledgebase

Access the answers to your technology questions today.

Subscribe Now

30-day free trial. Register in 60 seconds.

What Makes Experts Exchange Unique?

Members of the expert community talk about why the experience at Experts Exchange is different than what you will find anywhere else.

Trusted by the world's most respected brands.

image of each brand's logo

Faithfully serving IT professionals since 1996.

Experts Exchange Logo

Try it out and discover for yourself.

Subscribe Now

30-day free trial. Register in 60 seconds.

Related Solutions

  1. Open txt file with streamreader and save as Pipe delimited
    vb.net 2003 Is there a way to use streamreader and open a text file that is csv delimited and save it as a pipe delimited txt file ? Thanks fordraiders
  2. How to import a .TXT pipe delimited file into an Excel sprea…
    I am developing an Access/Excel application using an .ADP file. I use Access as the front end and SQL Server as the back end database. I would like to import a pipe delimited .TXT file into an Excel spreadsheet. The layout of the .TXT file is as follows: 02079900087372 | ...
  3. Command line parameter to delimit a txt into xls
    I am looking for a command line parameter that will delimit a txt file with pipes as a delimter and open excel with the file already delimited At this point I can type excel C:\test.txt this will open the file in excel but not delimit it? Is there such a parameter?
  4. XML To Pipe Delimited .txt File
    I need to take the information below and convert it to a pipe delimited .txt file. I also need to appeand some static headers to the some static text to the .txt file as well (I guess you might would call it header information. So I will post the XML file in this post and t...
  5. Convert xls into pipe delimited txt
    I am using Office Excel 2007 to build a VBA macro to convert the xls format into a pipe delimited txt file. Any idea how to do this ?. The normal Save to CSV feature will just give a comma, not a pipe. Oriiginal File : columnA columnB column3 abc def ...

Free Tech Articles

  1. WARNING: 5 Reasons why you should NEVER fix a computer for free.
    It is in our nature to love the puzzle. We are obsessed. The lot of us. We love puzzles. We love the challenge. We thrive on finding the answer. We hate disarray. It bothers us deep in our soul. W...
  2. SCCM OSD Basic troubleshooting
    SCCM 2007 OSD is a fantastic way to deploy operating systems, however, like most things SCCM issues can sometimes be difficult to resolve due to the sheer volume of logs to sift through and the dispe...
  3. Migrate Small Business Server 2003 to Exchange 2010 and Windows 2008 R2
    This guide is intended to provide step by step instructions on how to migrate from Small Business Server 2003 to Windows 2008 R2 with Exchange 2010. For this migration to work you will need the fo...
  4. Create a Win7 Gadget
    This article shows you how to create a simple "Gadget" -- a sort of mini-application supported by Windows 7 and Vista. Gadgets can be dropped anywhere on the desktop to provide instant information, ...
  5. Outlook continually prompting for username and password
    There have been a lot of questions recently regarding Outlook prompting for a username and password whilst using Exchange 2007. There are a few reasons why this would happen and I will try to cover t...
  6. Backup Exchange 2010 Information Store using Windows Backup
    There seems to be quite a lot of confusion around the ability to backup Exchange 2010 using the built in Windows Backup feature. This stems from the omission of this feature prior to Exchange 2007 s...

Cloud Class Webinars

  1. Avoiding Bugs in Microsoft Access
    Alison Balter takes and in-depth look at avoiding bugs in Access. In this webinar you will learn about using the immediate window to debug your applications, invoking the debugger, using breakpoints to troubleshoot, stepping through code, setting the next statement to execute, ...
  2. Top 10 Best New Features in Visio 2010
    Scott Helmers gives live demonstrations of the top 10 new features in Visio 2010. This webinar will teach you how to create compelling diagrams by adding shapes to the page with a single click, linking the shapes in a diagram to data in Excel (or SQL Server, or SharePoint), ...
  3. IT Consultant Business Secrets Revealed
    Michael Munger, Experts Exchange tech pro and IT consultant, pulls back the curtain on his very successful businesses and answers question on every IT consultant and business owner should know about. He shares secrets on what he did to solve the 5 most common problems in IT, ...
  4. Disaster Recovery and Business Continuity
    Quest CTO, Mike Billon, gives an overview of the steps involved in building a dunamic disaster recovery plan. Through case studies and an examination of software/hardware tooles for monitoring and testing, you'll gain a better understandin of where you are, where you want ...
  5. Organize Your Visio Diagrams with Containers and Lists
    Scott Helmers uses cross functional flowcharts, wireframe diagrams, data graphic legends and seating charts to teach you: how to ustilize all three new structured diagram components in Visio 2010, the best practices for organizeing shapes in previous version of Visio, how to organize ...
  6. How to Us Objects, Properties, Events and Methods in Microsoft Access
    Alison Dalter gives an in-depbth look at objects, properties, events and methods in Microsoft Access. In this webinar you will learn about using the object browser, referring to objects, working with properties and methods, working with object variables, understanding the ...

Join the Community

Give a Little. Get a Lot.

Join the community of experts here and help other tech pros by answering question in your area of expertise. You can earn FREE access to all Experts Exchange's premium features and resources.

Join the Community

Answers

 

by: craisinPosted on 2009-09-11 at 09:24:01ID: 25311064

Am working on it...solution just around the corner

 

by: AmazingTechPosted on 2009-09-11 at 09:37:06ID: 25311189

Is column 10 always empty?

 

by: AmazingTechPosted on 2009-09-11 at 09:37:41ID: 25311198

Sorry I meant column 11?

 

by: elwayisgodPosted on 2009-09-11 at 09:40:34ID: 25311216

Yes it is that's exactly why I want it eliminated.

 

by: AmazingTechPosted on 2009-09-11 at 10:05:26ID: 25311454

OK. It's just in DOS the FOR command treats 2 delimiters together as 1. So if it is always empty give this a try. It was simple until the double delimiter. Hopefully you don't have any other rows that have blank columns.

I'm not sure if the tabs will copy properly from the attach code so I'm also attaching my file.

Set File=Filename.txt
Set Output=Filename2.txt
 
for /f "tokens=2,5,6,10,11-22 delims=|" %%a in (%file%) do (
    echo %%~a	%%~d_%%~b	%%~c	%%~e	%%~f	%%~g	%%~h	%%~i	%%~j	%%~k	%%~l	%%~m	%%~n	%%~o	%%~p>>"%Output%"
)

                                              
1:
2:
3:
4:
5:
6:

Select allOpen in new window

 

by: elwayisgodPosted on 2009-09-11 at 10:39:54ID: 25311756

This I believe works... Now let me see if they must use VBScript or not as I might need it in VBScript.  Do you know how to do it in VBScript?

 

by: elwayisgodPosted on 2009-09-11 at 11:17:14ID: 25312074

on the current one, how can it replace the filename2.txt file each time.  Everytime i run it, it just appends to the file.

sam

 

by: QlemoPosted on 2009-09-11 at 11:21:15ID: 25312110

For replace, replace >> by >.
And sure it can be done in VBS, but I have to rush out now, so somebody else has to provide that (or I'm coming back to it tomorrow).

 

by: elwayisgodPosted on 2009-09-11 at 11:36:40ID: 25312250

ok  appreciate it....

 

by: craisinPosted on 2009-09-11 at 11:40:51ID: 25312292

OK, here is the solution in VB6 code, but the logic can be used in other macros etc.
You call this prgram from the command line as :"ChangeFile <FileName>"
(e.g. "ChangeFile file-example.txt")

I ran the code against the single line example file you supplied.

I have included message boxes to show the progressive results, but if you are using the code to run in production, just remove all the message boxes starting with "Step"

WARNING! This code overwrites the original file being processed! If you want to retain the original file, please advise and I will tweak the code to allow for that.

Please also note speacial warning in the main() subroutine. You will need to alter the file name in the code line for testing. I used  "C:\file-example.txt"

Is this what you are after?

Option Explicit
'should always use this option in VB6 code to force
'strict typing of variables
 
Private Sub main()
  'This program will accept a filename from the command line
  'and then process the file according to ceratin criteria in the function
  ' "Processline", writing the reformatted text lines in the input file
  'back out to the file. Note! The input file name is retained, but the original contents
  'are over-written!
  
  Dim cCommand As String 'variable to hold command line
  
  cCommand = Command     'obtain a value in the command line passed to the program
  
  '*** NOTE! The next program line is for testing purposes!
  'Alter the value as required to point to a test file.
  'Comment out the next line when running this program in production!
  cCommand = "C:\file-example.txt"
  
  If Len(cCommand) > 0 Then
    ChangeFile cCommand  ' a filename was supplied so let's process it
  Else
    MsgBox "Syntax: ChangeFile <filename>"
  End If
  End
End Sub
 
Private Sub ChangeFile(cInFile As String)
  ' A routine to change the contenets of a file (cInFile) according
  ' certain criteria stipulated in the function "ProcessLine"
  
  Dim nInFile As Integer     'Pointer to the file being read in
  Dim nOutFile As Integer    'Pointer to the file being written to
  Dim cOutFile As String     'Name of the file (temporary) being written to
  Dim cLine As String        'Variable to hold value of latest line read in from cInFile
  Dim nLines As Long         'Variable to keep track of number of lines processed
  Dim Processing As Boolean  'Control variable determing whether EOF has been reached
  
  If FileExists(cInFile) Then
    If FileSize(cInFile) > 0 Then   'an empty file should not be processed
      nInFile = FreeFile
      Open cInFile For Input As #nInFile
      nOutFile = FreeFile
      cOutFile = TempFile()
      Open cOutFile For Output As #nOutFile
      Processing = True
      Do While Processing
        Line Input #nInFile, cLine
        nLines = nLines + 1
        ProcessLine cLine, nOutFile
        Processing = (Not EOF(nInFile))
      Loop
      Close #nInFile
      Close #nOutFile
      Kill cInFile
      Name cOutFile As cInFile
      MsgBox cInFile + " processed: " + CStr(nLines) + " lines"
    Else
      MsgBox cInFile + " is empty!"
    End If
  Else
    MsgBox "File does not exists: " + cInFile
  End If
End Sub
Private Sub ProcessLine(cLine As String, nOutFile As Integer)
  ' A process to manipulate a line (cLine) according to certain criteria and then
  ' write the reformatted line to a file.
  ' "nOutFile" is a pointer to the output file whic has been previously opened for output
  
  Dim cToken() As String      'an array to hold original sections of the line being processed
  Dim cToken2(4) As String    ' a temprary array used for "token-swapping"
  Dim nToken As Integer       'a control variable to reference each token in the line
  cToken = Split(cLine, "|")  'obtain each token from the line, seperator being "pipe" symbol
  ShiftTokens cToken          'shift the tokens one place to the right (makes referencing easier
                              'since cToken is zero based array
  cLine = ""                  'reinitialize value of the current line
  For nToken = 1 To UBound(cToken) - 1  'rebuild the line according to criteria
    Select Case nToken
      Case 1, 3, 4, 7, 8, 9, 11
      Case Else
        cLine = cLine + cToken(nToken) + "|"
    End Select
  Next
  cLine = cLine + cToken(UBound(cToken))
  MsgBox "Step 1: " + cLine
  
  cToken = Split(cLine, "|")  'obtain each token from the newly defined line, seperator being "pipe" symbol
  ShiftTokens cToken          'again shift the tokens one place to the right (makes referencing easier
  cToken2(1) = cToken(1)      'do some token "swapping"
  cToken2(2) = cToken(4)
  cToken2(3) = cToken(2)
  cToken2(4) = cToken(3)
  cLine = ""                 'reinitialize value of the current line
  
  For nToken = 1 To UBound(cToken) - 1 'rebuild the line accorfing to criteria
    Select Case nToken
       Case 1, 3, 4
         cLine = cLine + cToken2(nToken) + "|"  'adding "swapped" tokens
       Case 2
         cLine = cLine + cToken2(nToken) + "_"  'adding swapped tokens 2 and 3 with a joining underscore
       Case Else
         cLine = cLine + cToken(nToken) + "|"  'adding unswapped tokens
     End Select
  Next
  cLine = cLine + cToken(UBound(cToken))
  MsgBox "Steps 2 and 3: " + cLine
  cLine = Replace(cLine, "|", vbTab)    'replace all pipe characters in the line with a Tab
  MsgBox "Step 4: " + cLine
  cLine = Replace$(cLine, Chr(34), "")  'remove all double quotes from Line
  MsgBox "Step 5: " + cLine
  Print #nOutFile, cLine                'write the line out to the output file
End Sub
 
Private Function ShiftTokens(cToken() As String) As String()
  'shift all tokens 1 place to the right
  '(makes reading this code a lot easier)
  'since "Option Base 1" cannot be applied
  'to arrays not dimensioned in their
  'original "Dim" statement
  Dim nToken As Integer
  ReDim Preserve cToken(UBound(cToken) + 1)
  For nToken = UBound(cToken) To 1 Step -1
    cToken(nToken) = cToken(nToken - 1)
  Next
End Function
Public Function TempFile(Optional cDir As String, Optional cExt As String) As String
Dim nRand As Integer
Dim cRand As String
If Len(Trim(cDir)) = 0 Then
  cDir = "c:\"
End If
If Len(Trim(cExt)) = 0 Then
  cExt = ".txt"
End If
Do While True
  nRand = Random(1000)
  cRand = CStr(nRand)
  If Right(cDir, 1) <> "\" Then
    cDir = cDir + "\"
  End If
  TempFile = cDir + "Temp" + cRand + cExt
  If Not FileExists(TempFile) Then
    Exit Do
  End If
Loop
End Function
 
 
 
Public Function Random(nUpper As Integer, Optional nLower As Integer) As Integer
Randomize
Random = -1
Do While Random < nLower
  Random = Int(nUpper * Rnd) + 1
Loop
End Function
 
Public Function FileExists(FileName As String) As Boolean
Dim fs As Object
Set fs = CreateObject("Scripting.FileSystemObject")
FileExists = fs.FileExists(FileName)
End Function
 
Function FileSize(cFile As String) As Long
Dim objFile As Variant
Dim fs
On Error GoTo nofile
FileSize = 0
Set fs = CreateObject("Scripting.FileSystemObject")
Set objFile = fs.GetFile(cFile)
FileSize = objFile.Size
nofile:
End Function
                                              
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:

Select allOpen in new window

 

by: craisinPosted on 2009-09-11 at 11:42:56ID: 25312311

If you compile the code just supplied in VB6 (or use it in another format), call the Project
ChangeFile. That is not a requiredment...you can call it what ever you like, since the "Main" subroutine is called first

 

by: AmazingTechPosted on 2009-09-11 at 11:45:31ID: 25312326

My VBS will do the job but it's probably not pretty.

File = "FileName.txt"
Output = "Filename3.txt"
 
Const ForWriting = 2
 
Set fso = CreateObject("Scripting.FileSystemObject")
 
Set InFile = fso.OpenTextFile(File)
Set OutFile = fso.CreateTextFile(Output, ForWriting)
 
Do While Not InFile.AtEndOfStream
    Row = Split(Replace(InFile.ReadLine, Chr(34), ""), "|")
    OutFile.WriteLine Row(1) + vbTab + Row(9) + "_" + Row(4) + vbTab + Row(5) + vbTab + Row(11) + vbTab + Row(12) + vbTab + Row(13) + vbTab + Row(14) + vbTab + Row(15) + vbTab + Row(16) + vbTab + Row(17) + vbTab + Row(18) + vbTab + Row(19) + vbTab + Row(20) + vbTab + Row(21) + vbTab + Row(22)
Loop
 
InFile.Close
OutFile.Close

                                              
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:

Select allOpen in new window

 

by: AmazingTechPosted on 2009-09-11 at 11:47:16ID: 25312353

For DOS to overwrite use this.

Set File=Filename.txt
Set Output=Filename2.txt
 
for /f "tokens=2,5,6,10,11-22 delims=|" %%a in (%file%) do (
    @echo %%~a	%%~d_%%~b	%%~c	%%~e	%%~f	%%~g	%%~h	%%~i	%%~j	%%~k	%%~l	%%~m	%%~n	%%~o	%%~p
)>"%Output%"

                                              
1:
2:
3:
4:
5:
6:

Select allOpen in new window

 

by: craisinPosted on 2009-09-11 at 11:58:42ID: 25312461

Just to make sure the process is not run against a file which is already converted
The following change should be made to the "ChangeFile" subroutine. (Amended code of routine restated below)

Private Sub ChangeFile(cInFile As String)
  ' A routine to change the contenets of a file (cInFile) according
  ' certain criteria stipulated in the function "ProcessLine"
  
  Dim nInFile As Integer     'Pointer to the file being read in
  Dim nOutFile As Integer    'Pointer to the file being written to
  Dim cOutFile As String     'Name of the file (temporary) being written to
  Dim cLine As String        'Variable to hold value of latest line read in from cInFile
  Dim nLines As Long         'Variable to keep track of number of lines processed
  Dim Processing As Boolean  'Control variable determing whether EOF has been reached
  Dim bSuccess As Boolean    'Switch to note whether conversion was successful
  
  If FileExists(cInFile) Then
    If FileSize(cInFile) > 0 Then   'an empty file should not be processed
      nInFile = FreeFile
      Open cInFile For Input As #nInFile
      nOutFile = FreeFile
      cOutFile = TempFile()
      Open cOutFile For Output As #nOutFile
      Processing = True
      bSuccess = True 'assume all will go well!
      Do While Processing
        Line Input #nInFile, cLine
        If InStr(cLine, "|") > 0 Then
          nLines = nLines + 1
          ProcessLine cLine, nOutFile
          Processing = (Not EOF(nInFile))
        Else
          bSuccess = False
          Processing = False
          MsgBox "Input file not in expected format: " + cInFile
        End If
      Loop
      Close #nInFile
      Close #nOutFile
      If bSuccess Then
        Kill cInFile
        Name cOutFile As cInFile
        MsgBox cInFile + " processed: " + CStr(nLines) + " lines"
      Else
        Kill cOutFile
      End If
    Else
      MsgBox cInFile + " is empty!"
    End If
  Else
    MsgBox "File does not exists: " + cInFile
  End If
End Sub

                                              
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:

Select allOpen in new window

 

by: elwayisgodPosted on 2009-09-11 at 11:59:49ID: 25312472

OK.. I will test all of these.  It's been a long time since I ran a vb script... I think it is:

cscript myvbscrip.vbs


 

by: AmazingTechPosted on 2009-09-11 at 12:39:40ID: 25312818

Yup that would work.

 

by: t0t0Posted on 2009-09-11 at 13:33:06ID: 25313259

Blimey! It appears there's a ferocious battle going on here...

I was bemused by the opening comment that a solution is just 'around the corner' and then, after several solutions were posted written in DOS, the VB solution eventually emerged and it was hilariously long, I actually physically laughed out loud.

I could scarcely believe that something accomplishable using just a few primitive DOS commands required such a huge effort from a versatile high-level and modern programming language.

I'm tryuly bewildered.

I have it on good authority the whole thing can be accomplished using just a single line of code written in Perl - Wow!

Well done to AmazingTech though.... I've only recently discovered that parsing CSV fiiles using just DOS commands can be quite challenging.

 

by: elwayisgodPosted on 2009-09-11 at 16:56:56ID: 25314417

he he he... now the client said they might need it in  Unix Shell Scripting..... I'm dying here and better up the points and split them out :)

 

by: QlemoPosted on 2009-09-11 at 17:59:14ID: 25314598

:-|   "Requirements never change, if you do not ask the client". Seems as the unposted Perl line is the winner.

 

by: craisinPosted on 2009-09-11 at 18:00:33ID: 25314600

My VB6 could have been done in much less code, but I like to comment everything fully and so I used it as an exercise in structured programming. Still it was fun.

Nice to see you got an easy answer...Cheers

 

by: craisinPosted on 2009-09-11 at 18:03:59ID: 25314611

Be careful that the Perl line works successfully on lines which have already been processed by the "Perl line" before. Can be catastrophic results if a processed file has already been processed, as I discovered with my code.

 

by: elwayisgodPosted on 2009-09-23 at 11:11:41ID: 25406114

Hi,

The original solution is no longer working.  Basically when there are more lines it just gives me one line in my output.  Not sure what happned.  The line it gives me is only the very last line thats in the source file.  I changed the >> to > on the output part.  So somehow each time it's just replacing the output instead of looping through each line?  So the trick is to replace the file each time but at same time get all the lines.....Here is my code:

Set File=cfm_extract.txt
Set Output=2008_Budget_Final.txt
for /f "tokens=2,5,6,10,11-22 delims=|" %%a in (%file%) do (
    echo %%~a   %%~d_%%~b   %%~c   %%~e   %%~f   %%~g   %%~h   %%~i   %%~j   %%~k   %%~l   %%~m   %%~n   %%~o   %%~p>"%Output%"
)

 

by: AmazingTechPosted on 2009-09-24 at 07:43:55ID: 25413851

Add a > or use the Attached code which will delete the existing file automatically.

Set File=cfm_extract.txt
Set Output=2008_Budget_Final.txt
for /f "tokens=2,5,6,10,11-22 delims=|" %%a in (%file%) do (
    echo %%~a   %%~d_%%~b   %%~c   %%~e   %%~f   %%~g   %%~h   %%~i   %%~j   %%~k   %%~l   %%~m   %%~n   %%~o   %%~p>>"%Output%"
)

Set File=cfm_extract.txt
Set Output=2008_Budget_Final.txt
(for /f "tokens=2,5,6,10,11-22 delims=|" %%a in (%file%) do (
    echo %%~a   %%~d_%%~b   %%~c   %%~e   %%~f   %%~g   %%~h   %%~i   %%~j   %%~k   %%~l   %%~m   %%~n   %%~o   %%~p
))>"%Output%"

                                              
1:
2:
3:
4:
5:

Select allOpen in new window

 

by: t0t0Posted on 2009-09-24 at 08:21:49ID: 25414297

AmazingTech

I don't think it's as simple as that. I think you may encounter issues with blank fields and blank lines as well as whitespaces in general.... I think you may have missed the 'FY' - '20' thing too.

Here was my initial thoughts but it requires a little more work....

@echo off
setlocal enabledelayedexpansion
 
(for /f "tokens=2,5,6,10,12-14,16-18,21-23,25-27 delims=|" %%a in (cfm_extract.txt) do (
   set col6=%%~f
   echo %%~a   %%~d_%%~b   %%~c  %%~e  20!col6:~-2!   %%~g  %%~h  %%~i  %%~j  %%~k  %%~l  %%~m  %%~n  %%~o  %%~p>>"%Output%"
))>2008_Budget_Final.txt
                                              
1:
2:
3:
4:
5:
6:
7:

Select allOpen in new window

 

by: elwayisgodPosted on 2009-09-24 at 08:23:21ID: 25414315

Thanks for helping out.  This script was taking 1hr to process 1million lines.  Thus I had to change it to VB Script as it takes 1min 40 sec to do 1 million lines.  

Appreciate all the feedback though....

20120131-EE-VQP-002

3 Ways to Join

30-Day Free Trial

The Experts

98% positive feedback on 31,087 answers since March 2000. angeliii is a Microsoft Most Valuable Professional for his work with MS SQL Server & Develoment.

He has also proven his knowledge of Visual Basic Programming, PHP Scripting and Oracle Databases.

The Experts

97% positive feedback on 10,752 answers since July 2000. lrmoore has more than 18 years experience in the networking industry.

The six-time Mircosoft MVPs specialties include firewalls, virtual private networking, and network management.

Testimonials

"...and excellent source for support... Kind of like having your very own IT dept." Electriciansnet

Testimonials

"I was apprehensive at signing up at first. However... it has already made my life as an IT administrator much easier." JaCrews

Testimonials

"WOW! You guys have great, active, and knowledgeable people on here." moore50

Business Clients

Business Clients

In the Press

"If you’ve got a question... Experts Exchange can supply an answer.”

In the Press

"...an invaluable aid for both IT professionals and those who require tech support."

In the Press

"where IT professionals provide quick answers on just about any topic"

Business Account Plans

Loading Advertisement...