I'm writing a macro to edit some files and need to be able to search for a particular character within the current line. I don't want to search the whole file just the current line. How would I do this???
Either copy the selected line to a new file and search for the character there:
Clipboard 9
SelectLine
Copy
NewFile
Paste
Top
Find "x"
IfFound
CloseFile NoSave
:
:
Else
CloseFile NoSave
:
:
EndIf
ClearClipboard
Clipboard 0
or run a replace all on the selected line without really replacing something:
SelectLine
Find MatchCase "x"
Replace All SelectText "x"
IfFound
:
:
Else
:
:
EndIf
Third method would be to temporarily modify the selected line so it contains at start of the line a string which surely does not exist anywhere else in the file and use a regular expression search with this specific string inside the regular expression search string.
Clipboard 9
SelectLine
Copy
NewFile
Paste
Top
Find "x"
IfFound
CloseFile NoSave
:
:
Else
CloseFile NoSave
:
:
EndIf
ClearClipboard
Clipboard 0
or run a replace all on the selected line without really replacing something:
SelectLine
Find MatchCase "x"
Replace All SelectText "x"
IfFound
:
:
Else
:
:
EndIf
Third method would be to temporarily modify the selected line so it contains at start of the line a string which surely does not exist anywhere else in the file and use a regular expression search with this specific string inside the regular expression search string.
Best regards from an UC/UE/UES for Windows user from Austria
This worked like a charm. Thank you verry much. Now I need a way to capture the filename and chop off the last few characters so I can use it in a replace command. For instance if the filename is Schedule2006.txt I want to cut off the 2006.txt part. But the filename could also be Results2006.txt and I'd want to cut off the same part of the filename so I couldn't just hard code the filename. Any thoughts?
After I get this one done I should be finished with this macro for now.
Thanks.
After I get this one done I should be finished with this macro for now.
Thanks.
This macro is recorded quick and dirty but it works without regular expression search for your get filename part task.
InsertMode
ColumnModeOff
HexOff
Top
Clipboard 9
CopyFilePath
Paste
Loop 8
Key BACKSPACE
EndLoop
"
"
Key UP ARROW
Key END
Find Up "\"
Key DEL
SelectToTop
Key DEL
StartSelect
Key END
Cut
EndSelect
Key DEL
Find "...."
Replace "^c"
ClearClipboard
Clipboard 0
The additional questions you wrote for this problem are deleted. Hopefully it is okay.
InsertMode
ColumnModeOff
HexOff
Top
Clipboard 9
CopyFilePath
Paste
Loop 8
Key BACKSPACE
EndLoop
"
"
Key UP ARROW
Key END
Find Up "\"
Key DEL
SelectToTop
Key DEL
StartSelect
Key END
Cut
EndSelect
Key DEL
Find "...."
Replace "^c"
ClearClipboard
Clipboard 0
The additional questions you wrote for this problem are deleted. Hopefully it is okay.
Best regards from an UC/UE/UES for Windows user from Austria
You rock, Mofi. I wrote a slight variation on what you wrote and it works great. This is going to save me alot of time in the future.
Thanks,
Dave
Thanks,
Dave
Hi Mofi,
I haven't been able to make this macro work. Your help would be appreciated. Here is my variation:
I am trying to concatenate a section of a file with a varying number of line items stopping when it encounters a particular word or phrase.
It is not working, it ignores the first line and then misses the Find command. What does the search & replace for the same string accomplish? Your thoughts would be appreciated.
Thank you.
I haven't been able to make this macro work. Your help would be appreciated. Here is my variation:
Code: Select all
InsertMode
ColumnModeOff
HexOff
UnixReOff
TrimTrailingSpaces
Top
Loop
SelectLine
Find "Trade"
Replace All SelectText "Trade"
IfNotFound
Key END
" "
Key DEL
Else
ExitLoop
EndIf
It is not working, it ignores the first line and then misses the Find command. What does the search & replace for the same string accomplish? Your thoughts would be appreciated.
Thank you.
It does nothing or exactly in your case without Find option MatchCase it converts the word trade in any case to "Trade". It's just for testing if a specific string is within the current line. It simply restricts the find on a single line.Hownow wrote:What does the search & replace for the same string accomplish?
I guess your loop is not working because there is missing the command EndLoop. And in the IfNotFound branch you have forgotten
EndSelect
Key UP ARROW
before Key END. SelectLine selects the whole line including the line terminator and the cursor is at start of the next line.
If you are a macro beginner you should test your macro step by step by inserting the macro command ExitMacro after every important command sequence and look what happens when executing the macro to this point. Then reload the file to restore all changes, edit the macro and move the ExitMacro command down, run the macro again, look again, reload the file, ...
But I think for your problem there is a much faster solution.
InsertMode
ColumnModeOff
HexOff
TrimTrailingSpaces
Top
StartSelect
Find Select "Trade"
IfSel
Key UP ARROW
Key END
Find "^p"
Replace All SelectText " "
EndIf
EndSelect
Top
What this macro does?
From top of the file it selects everything till word "Trade". If the word "Trade" (or "trade" or "tRaDe" or ...) is found and so a selection exists, it removes from the selection the current line by setting the cursor to the end of the previous line (or current line if "Trade" is found at first line of the file). Because of the StartSelect command all cursor moves modify the selection until EndSelect is used. Then it replaces in the whole selected text all CRLF by a space to concatenate the lines. If your file is a Unix file opened in Unix mode you have to use ^n instead of ^p.
I'm not sure if the line with "Trade" should be also added to the concatenate block or not. The macro above will not add it. Remove the macro commands
Key UP ARROW
Key END
and the text of the line with "Trade" is at the end of the single line after the macro execution.
Best regards from an UC/UE/UES for Windows user from Austria
Mofi,
Thank you for this elegant solution! I "stepped" through the code to figure out how you accomplished this. I was wondering how I could set breakpoints, maybe this will get me beyond the beginners level.
How does this command - Replace All SelectText " " know to remove the CR/LF at the end of each individual line?
Thank you for this elegant solution! I "stepped" through the code to figure out how you accomplished this. I was wondering how I could set breakpoints, maybe this will get me beyond the beginners level.
How does this command - Replace All SelectText " " know to remove the CR/LF at the end of each individual line?
The Replace command (not the ReplInFiles command) works always and only in combination with the Find command in the line above. A Replace without Find is not possible. This is exactly as in the Replace dialog where you have to enter also always a search string.Hownow wrote:How does this command - Replace All SelectText " " know to remove the CR/LF at the end of each individual line?
Find "^p" searches for CRLF. See help of UE about the Find command where the special characters for non visible control characters are listed and explained in a table. This is not a regular expression character!
Best regards from an UC/UE/UES for Windows user from Austria
- 2
I have a long textfile with references, see below. Before importing that properly into Endnote (a bibliography software), I want to clean the Lines "PG:" In each line "PG: ..." the space between " - " should be removed, so that it results, e.g. in "PG: 150-167".
Can anybody tell me the grep code?
TI: A role for individuality and mystery in "managing"
Can anybody tell me the grep code?
TI: A role for individuality and mystery in "managing"
Can be done with following UltraEdit style regular expression replace:
Find: %^(PG: [0-9]+^) - ^([0-9]+^)
Replace: ^1-^2
Same with Unix/Perl regular expression style
Find: ^(PG: \d+) - (\d+)
Replace: \1-\2
Find: %^(PG: [0-9]+^) - ^([0-9]+^)
Replace: ^1-^2
Same with Unix/Perl regular expression style
Find: ^(PG: \d+) - (\d+)
Replace: \1-\2
Best regards from an UC/UE/UES for Windows user from Austria
- 2
Thanks for this! I checked for a solution at www.regular-expressions.info, however I did not come to a successful result. This helps, great!