So one of the common tasks that I do as a programmer is debugging a live system. And one of the ways that I debug a live system is to capture a verbose log from the console.
Typically the log file has around 20 extra lines for every one line I am interested.
To minimize my macro script I went about creating a macro that will grab ONLY the one line out of 20 that I am interested in! (As opposed to doing 20 substitutions for all the lines I didn't want... which would make the macro 20 times longer than it needs to be.) The rest of this macro code will turn that one line into a *.csv file so I can play with the numbers in Matlab or Excel as I see fit.
Here is the code for the macro (these commands are Ultra Edit specific commands):
Clipboard 1
ClearClipboard
Loop
Find RegExp "{*}DBGLINE: STR1 ( * ) STR2 ( * )^p"
IfFound
CopyAppend
Else
ExitLoop
EndIf
EndLoop
SelectAll
Delete
Paste
Find RegExp "{*}DBGLINE: STR1( "
Replace All ""
Find RegExp " ) STR2 ( "
Replace All " , "
Find RegExp " )*^p"
Replace All "^p"
ClearClipboard
*FYI, I have posted the API/description of what each command does online.
Let me break down in a more human readable pseudo code what this macro is doing:
buffer = "";
// Keep finding $REGEX until EOF
while(1) {
if( Find $REGEX ) {
Select the text;
} else {
break;
}
buffer += selected piece of text;
}
// Now we can focus only on the selected lines from the log file
Select the entire text in the file;
Delete all selected text;
Paste the buffer into the text file;
// Convert the human readable text into a *.csv file
Parse out all the non-numerical content;
Replace with " , " commas;
I know how to create simple macros in VIM by adding a map to my .vimrc file:
map $KEYBOARD :%s/$STR_A/$STR_B/gc<CR>
But I was wondering if there was some way to do the while(1) and the CopyAppend in a macro. Like in some sort of .vimrc defined function:
function! CustomScript1()
...
" TODO: vim commands here
...
endfunction
map $KEYBOARD :call CustomScrip1()<CR>
So how would you change the above UltraEdit macro into a VIM function?
I really need to get the ability to recreate this kind of script in VIM because I am currently stuck doing 20 substitute (sometimes more) and replaces... and it is driving me nuts wasting my time doing such inelegant solution to parsing the log file!