Search string and copy all found lines/strings to clipboard or new file

Help with writing and playing macros

Search string and copy all found lines/strings to clipboard or new file

Postby Akyno » Fri Feb 25, 2005 11:55 am

Hi,

I need a small macro. Basically an automated version of the search where you can list all lines containing the searched string and copy all of them to clipboard.

Right now I'm doing this... it works but it takes damn long.. there must be away to do this faster...

Top
Loop
Find "search string"
IfFound
SelectLine
CopyAppend
Else
ExitLoop
EndIf
EndLoop

Also is there a way to avoid the popup window "Search string not found" in the end?

regards
Matthias
User avatar
Akyno
Newbie
 
Posts: 4
Joined: Wed Feb 16, 2005 12:00 am
Location: Frankfurt / Germany

Re: Search string and copy all found lines/strings to clipboard or new file

Postby oracledba » Thu Mar 03, 2005 5:58 pm

Your largely doing what I would do. The one thing I might do different is do an expression search.This would be better because UE's kernel would be highlighting everything we want to append into the clipboard as part of the search. This would elminate a few lines of macro code from your loop processing. In the example below, we are searching for lines containg string "asdf" (no quotes).

The macro places a blank line at end of file so we have that as an anchor. Clears clipboard, searches file in a loop, appending results into clipboard. When were done we delete that blank line we inserted. Clipboard contains what you want.

The macro itself should have a check in the macro attribute "continue if find with replace not found". This will eliminate your error dialog box at EOF.

Does this work any faster?


Bottom
Key END
"
"
Top
ClearClipboard
Loop
Find RegExp "%*asdf*^p"
IfFound
CopyAppend
Else
ExitLoop
EndIf
EndLoop
Bottom
Key END
Key BACKSPACE
User avatar
oracledba
Basic User
Basic User
 
Posts: 24
Joined: Wed Jan 19, 2005 12:00 am

Re: Search string and copy all found lines/strings to clipboard or new file

Postby StuartMW » Thu Nov 02, 2006 1:45 pm

I'm trying to create a macro that finds all occurrences of a particular string in a file and copies just those lines to a new file.

I used macro recording to capture the exact steps I do manually but the function does NOT record the "Clipboard" button press in the "Lines containing find string" window (see the resulting captured macro listing below).

InsertMode
ColumnModeOff
HexOff
UnixReOff
Find MatchCase PreserveCase "String"
NewFile
Paste

I tried manually adding a "Clipboard 0" command right before the "NewFile" but that doesn't work.

Does anyone know the trick to make this work?
User avatar
StuartMW
Newbie
 
Posts: 4
Joined: Mon Feb 28, 2005 12:00 am

Re: Search string and copy all found lines/strings to clipboard or new file

Postby Mofi » Thu Nov 02, 2006 2:05 pm

List Lines Containing String is a find option which cannot be used from a macro because it requires user interaction. The macro solution is to use a loop with CopyAppend command. The following macro runs always from top of the file and needs the macro property Continue if a Find with Replace not found or Continue if search string not found enabled.

InsertMode
ColumnModeOff
HexOff
Bottom
IfColNumGt 1
"
"
IfColNumGt 1
DeleteToStartofLine
EndIf
EndIf
Top
Clipboard 9
ClearClipboard
Loop
Find MatchCase "String"
IfFound
SelectLine
CopyAppend
Else
ExitLoop
EndIf
EndLoop
NewFile
Paste
ClearClipboard
Clipboard 0

A variant of above which copies only the found string to clipboard with an additional CR/LF (or just CR or LF according to file type and edit mode) to get just a list of found strings. That makes only sense for a regular expression search. Unfortunately it is not possible to simply append a string to clipboard in the macro environment. (Scripts can do it.) So always the line termination must be inserted and cut with append to the clipboard.

InsertMode
ColumnModeOff
HexOff
UnixReOff
Top
"
"
SelectToTop
Clipboard 8
Cut
Clipboard 9
ClearClipboard
Loop
Find RegExp "enter regex search string here"
IfFound
CopyAppend
EndSelect
Key LEFT ARROW
Key RIGHT ARROW
Clipboard 8
Paste
StartSelect
Key UP ARROW
Key END
Clipboard 9
CutAppend
Else
ExitLoop
EndIf
EndLoop
NewFile
Paste
ClearClipboard
Clipboard 8
ClearClipboard
Clipboard 0

A third version is like above. It just copies the found strings, but without appending immediately the line terminations. So in the new file there are lots of found strings on one single line and nearly the same regular expression as used before is used now to insert the line terminations. The example code below is for the UltraEdit regular expression engine for DOS files. For Unix or Perl regexp use just () instead of ^(^) and \1 instead of ^1. For UNIX files not temporarily convert to DOS on load use ^n (UE regexp) respectively \n (Unix/Perl regexp).

InsertMode
ColumnModeOff
HexOff
UnixReOff
Top
Clipboard 9
ClearClipboard
Loop
Find RegExp "enter regex search string here"
IfFound
CopyAppend
Else
ExitLoop
EndIf
EndLoop
NewFile
Paste
Top
Find RegExp "^(enter regex search string here again^)"
Replace All "^1^p"
ClearClipboard
Clipboard 0
User avatar
Mofi
Grand Master
Grand Master
 
Posts: 4062
Joined: Thu Jul 29, 2004 11:00 pm
Location: Vienna

Re: Search string and copy all found lines to clipboard

Postby StuartMW » Thu Nov 02, 2006 2:31 pm

Thanks :)
I'll fine-tune it to my needs :wink:
User avatar
StuartMW
Newbie
 
Posts: 4
Joined: Mon Feb 28, 2005 12:00 am


Return to Macros