1.

Solve : Text file to comma delimited?

Answer»

Here is a question about the FOR command, is there a way to change the default parsing so it doesn't ignore blank LINES? The command I am using

FOR /F options ... blah by default ignores blank lines, what happens if I want to echo them to output as a blank line?

I can remove the /F but then delims is not expected as this time.Code: [Select]ECHO off
CLS
TITLE Converting TAB delimited to CSV


setlocal enabledelayedexpansion

SET STIME=%TIME%

SET inputF=input1.txt
if not exist !inputF! ECHO Input file missing? & Pause & EXIT
SET outputF=output.csv
if exist !outputF! Del !outputF!


For /F "delims=" %%A in (%inputF%) do (
REM SET count=0
SET string=%%A

ECHO !string! |find /I "INST:" >nul
IF "!errorlevel!"=="0" call :Header "!string!"
ECHO !string! |find /I "Program" >nul
IF "!errorlevel!"=="0" call :Header "!string!"
ECHO !string! |find /I "BATCH#" >nul
IF "!errorlevel!"=="0" call :Header1
ECHO !string! |find /I "......" >nul
IF "!errorlevel!"=="0" call :Header "!string!"


ECHO !string! |find /I "Original" >nul
IF "!errorlevel!"=="0" call :VarOrig
ECHO !string! |find /I "ChangedTo" >nul
IF "!errorlevel!"=="0" call :VarChg

<nul call set /p z= .

)
)
GOTO END

:Header
REM set /a count+=1
ECHO !string!>>%outputF%
goto :eof

:Header1
REM SET /a count+=1
ECHO Batch#, Trans#, Old/New, ISN, AUX, RT NUMBER, W.AUX, Account, TC, Description, Amount>>%outputF%
ECHO.>>%outputF%
goto :eof

:VAROrig
SET BATCH=0,6
SET Trans=6,8
SET OLDNEW=14,10
SET ISN=24,10
SET AUX=34,9
SET RT=43,10
SET WAUX=53,9
SET Acct=62,18
SET TC=79,8
SET Desc=86,13
SET Amt=98,14

SET VAR1=!string:~%BATCH%!
REM ECHO VAR1:!var1! & PAUSE
SET VAR2=!string:~%Trans%!
REM ECHO VAR2:!var2! & PAUSE
SET VAR3=!string:~%OLDNEW%!
REM ECHO VAR3:!var3! & PAUSE
SET VAR4=!string:~%ISN%!
REM ECHO VAR4:!var4! & PAUSE
SET VAR5=!string:~%AUX%!
REM ECHO VAR5:!var5! & PAUSE
SET VAR6=!string:~%RT%!
REM ECHO VAR6:!var6! & PAUSE
SET VAR7=!string:~%WAUX%!
REM ECHO VAR7:!var7! & PAUSE
SET VAR8=!string:~%Acct%!
REM ECHO VAR8:!var8! & PAUSE
SET VAR9=!string:~%TC%!
REM ECHO VAR9:!var9! & PAUSE
SET VAR10=!string:~%Desc%!
REM ECHO VAR10:!var10! & PAUSE
SET VAR11=!string:~%Amt%!

ECHO !VAR1!,!VAR2!,!VAR3!,!VAR4!,!VAR5!,!VAR6!,!VAR7!,!VAR8!,!VAR9!,!VAR10!,!VAR11!>>%outputF%
goto :eof

:VARChg
SET BATCH=0,6
SET Trans=6,8
SET OLDNEW=14,11
SET ISN=25,10
SET AUX=35,9
SET RT=44,10
SET WAUX=54,9
SET Acct=63,18
SET TC=80,8
SET Desc=87,13
SET Amt=99,14

SET VAR1=!string:~%BATCH%!
REM ECHO VAR1:!var1! & PAUSE
SET VAR2=!string:~%Trans%!
REM ECHO VAR2:!var2! & PAUSE
SET VAR3=!string:~%OLDNEW%!
REM ECHO VAR3:!var3! & PAUSE
SET VAR4=!string:~%ISN%!
REM ECHO VAR4:!var4! & PAUSE
SET VAR5=!string:~%AUX%!
REM ECHO VAR5:!var5! & PAUSE
SET VAR6=!string:~%RT%!
REM ECHO VAR6:!var6! & PAUSE
SET VAR7=!string:~%WAUX%!
REM ECHO VAR7:!var7! & PAUSE
SET VAR8=!string:~%Acct%!
REM ECHO VAR8:!var8! & PAUSE
SET VAR9=!string:~%TC%!
REM ECHO VAR9:!var9! & PAUSE
SET VAR10=!string:~%Desc%!
REM ECHO VAR10:!var10! & PAUSE
SET VAR11=!string:~%Amt%!

ECHO !VAR1!,!VAR2!,!VAR3!,!VAR4!,!VAR5!,!VAR6!,!VAR7!,!VAR8!,!VAR9!,!VAR10!,!VAR11!>>%outputF%
ECHO.>>%outputF%
goto :eof

:END
SET ETIME=%TIME%
ECHO.
ECHO ST:!STIME! ET:!ETIME!
PAUSE
rem EXIT
Anyone wanna share info on VBscript, I'm betting it would be quicker using that as a language. This works but takes a while.


Example data (input) Reason behind doing the output this way is I have to keep empty data cells.
Code: [Select]...

INST:012345678 INPUT TEST Transaction Audit Journal Page: 2
Program EOD UNIT: 0123456789-09991 WORKSTATION DEVICE ID: 999999999 Date: 12/04/09 03:28:39
Batch# Trans# Old/New ISN AUX RT Number W.AUX Account TC Description Amount

111111 222222 Original 0011111111 3333-3333 1234567 On-UsCredit 200.00
111111 222222 ChangedTo 0011111111 3333-3333 1234567 On-UsCredit 200.00

111111 222222 Original 0022222222 555555555 2222-2222 On-UsCredit 0.00
111111 222222 ChangedTo 0022222222 555555555 2222-2222 On-UsCredit 28.50

111111 222222 Original 0033333333 1111*1111 11111111111 7626 ransitDebit 8.00
111111 222222 ChangedTo 0033333333 111111111 11111111111 7626 ransitDebit 8.00
OUTPUT
Code: [Select]...
INST:012345678 INPUT TEST Transaction Audit Journal Page: 2
Program EOD UNIT: 0123456789-09991 WORKSTATION DEVICE ID: 999999999 Date: 12/04/09 03:28:39
Batch#, Trans#, Old/New, ISN, AUX, RT Number, W.AUX, Account, TC, Description, Amount

111111, 222222, Original ,0011111111, , 3333-3333, , 1234567 , , On-UsCredit , 200.00
111111, 222222, ChangedTo ,0011111111, , 3333-3333, , 1234567 , , On-UsCredit , 200.00

111111, 222222, Original ,0022222222, , 555555555, , 2222-2222 , , On-UsCredit , 0.00
111111, 222222, ChangedTo ,0022222222, , 555555555, , 2222-2222 , , On-UsCredit , 28.50

111111, 222222, Original ,0033333333, , 1111*1111, , 11111111111 , 7626 , ransitDebit , 8.00
111111, 222222, ChangedTo ,0033333333, , 111111111, , 11111111111 , 7626 , ransitDebit , 8.00

Code: [Select][quote author=gh0std0g74 link=topic=96085.msg650435#msg650435 date=1259917018]
since you have now put in some effort, here's an alternative vbscript, plus padding of zeroes. You can pad your data before importing to excel

[code]
Set objFS=CreateObject("Scripting.FileSystemObject")
Set objArgs = WScript.Arguments
strFile = objArgs(0)
Set objFile = objFS.OpenTextFile(strFile)
Do Until objFile.AtEndOfStream
....[/quote]

So switching to VBS.... Seems to work much quicker, is there a way to get rid of the invalid characters when importing into excel either through excel or preferably through the script itself. By invalid character I mean it is displays as a ? in a box. I also get an error about input past end of file, not sure how to handle that error Code 800A003E. Any help is appreciated.
Code: [Select]Option Explicit

Dim objOutputFile, s, objFS, objArgs, strInputFile, objFile, strOutputfile
Dim objFSO, boolMatchCaseSensitive, objInputFile


Set objFS=CreateObject("Scripting.FileSystemObject")
Set objArgs = WScript.Arguments
strInputFile = objArgs(0)
Set objFile = objFS.OpenTextFile(strInputFile)

strOutputfile = "outputVBS.csv"
If objFS.fileExists(strOutputfile) Then objFS.DeleteFile(StrOutputfile)



Set objFSO = CreateObject("Scripting.FilesystemObject")
Const intForReading = 1
Const intForWriting = 2
Const intForAppending = 8
Set objInputFile = objFSO.OpenTextFile(strInputFile, intForReading, False)



Set objOutputFile = objFS.OpenTextFile(strOutputFile,intForAppending, True)

Do Until objFile.AtEndOfStream
s = objInputFile.ReadLine()
If InStr(s,"INST:") > 0 Then ObjOutputfile.WriteLine s
If InStr(s,"Program") > 0 Then ObjOutputfile.WriteLine s
If InStr(s,"Batch#") > 0 Then ObjOutputfile.WriteLine "Batch#, Trans#, Old/New, ISN, AUX, RT Number, W.AUX, Account, TC, Description, Amount"
If InStr(s,".....") > 0 Then ObjOutputfile.WriteLine s

'BATCH 'TRANS 'OLDNEW 'ISN 'AUX 'RT 'WAUX 'Acct 'TC 'Desc 'Amt
If InStr (s,"Original") > 0 Then ObjOutputfile.WriteLine vbcrlf & Mid(s,1,7) & "," & Mid(s,7,8) & "," & Mid(s,15,9) & "," & Mid(s,25,10) & "," & Mid(s,35,9) & "," & Mid(s,44,11) & "," & Mid(s,54,9) & "," & Mid(s,63,18) & "," & Mid(s,80,8) & "," & Mid(s,87,13) & "," & Mid(s,99,14)
If InStr (s,"ChangedTo") > 0 Then ObjOutputfile.WriteLine Mid(s,1,7) & "," & Mid(s,7,8) & "," & Mid(s,15,10) & "," & Mid(s,25,11) & "," & Mid(s,36,10) & "," & Mid(s,45,10) & "," & Mid(s,55,9) & "," & Mid(s,63,18) & "," & Mid(s,80,8) & "," & Mid(s,88,13) & "," & Mid(s,100,14)


Loop
objOutputFile.Close
Set objOutputFile = Nothing
Set objFS = Nothing
WScript.Quit()[/code]how does your output file look like after you run the script Pretty much the same as above ... spacing is different but still works as a Comma delimited file when importing into excel
Code: [Select]INST:012345678 INPUT TEST Transaction Audit Journal Page: 2
Program EOD UNIT: 0123456789-09991 WORKSTATION DEVICE ID: 999999999 Date: 12/04/09 03:28:39
Batch#, Trans#, Old/New, ISN, AUX, RT Number, W.AUX, Account, TC, Description, Amount

111111 , 222222, Original,0011111111, , 3333-3333 , , 1234567 , , On-UsCredit , 200.00
111111 , 222222, ChangedTo, 0011111111, , 3333-3333, , 1234567 , , On-UsCredit , 200.00

111111 , 222222, Original,0022222222, , 555555555 , , 2222-2222 , , On-UsCredit , 0.00
111111 , 222222, ChangedTo, 0022222222, , 555555555, , 2222-2222 , , On-UsCredit , 28.50

111111 , 222222, Original,0033333333, , 1111*1111 , , 11111111111 , 7626 , ransitDebit , 8.00
111111 , 222222, ChangedTo, 0033333333, , 111111111, , 11111111111 , 7626, ransitDebit , 8.00

imported into excel
Code: [Select]"INST:012345678 INPUT TEST Transaction Audit Journal Page: 2"
Program EOD UNIT: 0123456789-09991 WORKSTATION DEVICE ID: 999999999 Date: 12/04/09 03:28:39
Batch# " Trans#" Old/New " ISN" " AUX" " RT Number" " W.AUX" " Account" " TC" " Description" " Amount"

"111111 " " 222222" " Original" 11111111 " " " 3333-3333 " " " " 1234567 " " " " On-UsCredit " " 200.00"
"111111 " " 222222" " ChangedTo" " 0011111111" " " " 3333-3333" " " " 1234567 " " " " On-UsCredit " " 200.00"

"111111 " " 222222" " Original" 22222222 " " " 555555555 " " " " 2222-2222 " " " " On-UsCredit " " 0.00"
"111111 " " 222222" " ChangedTo" " 0022222222" " " " 555555555" " " " 2222-2222 " " " " On-UsCredit " " 28.50"

"111111 " " 222222" " Original" 33333333 " " " 1111*1111 " " " " 11111111111 " " 7626 " " ransitDebit " " 8.00"
"111111 " " 222222" " ChangedTo" " 0033333333" " " " 111111111" " " " 11111111111 " " 7626" " ransitDebit " " 8.00"

I also attached the outputfile if you care to look at the invalid characters, now that I see the copy paste I'm assuming it is the " symbol, is that the tabs... extra spaces? Is there an operation with the way I'm outputting the data to remove extra white SPACE?



[Saving space, attachment deleted by admin]After lots of research I found the Trim command the replace command. I am using the replace command in a for loop to look for the TAB and replacing with "" (nothing) and doing the same for space thus removing the extra unneeded spaces.

Thanks always for the direction and assistance.



Discussion

No Comment Found