Delete line with partially duplicate content

Help with writing and playing macros

Delete line with partially duplicate content

Postby jrpm » Wed Apr 05, 2006 10:52 am

Hello,

I try to create a macro that searches a file for multiple entries, and deletes all that start with a duplicate number (all but the first line).
The lines always start with 7 digits followed by a semicolon. This number is what I want to search for.

0019608;HIRSCH-A
0020416;MARIEN A
0023403;ADLER AP
0023403;ADLER-AP
0024012;BÄREN-AP
0024012;BÄREN-AP
0024012;BÄREN-AP
0024940;OBERE ST
0024940;OSA;DILL

the result should look like this:

0019608;HIRSCH-A
0020416;MARIEN A
0023403;ADLER AP
0024012;BÄREN-AP
0024940;OBERE ST

sadly I don't know anything about UltraEdit Macros so I tried to created one with copying parts of macros from this forum, but it won't work..

How can I do this? :)
Thanks in advance
jrpm
User avatar
jrpm
Newbie
 
Posts: 2
Joined: Tue Apr 04, 2006 11:00 pm

Re: Delete line with partially duplicate content

Postby Mofi » Wed Apr 05, 2006 4:32 pm

No problem. This macro needs the macro property Continue if a Find with Replace not found.

Please also look at the multiple lines with 0024012 after macro execution. I know that old V10.10c of UE does not corretly delete all these lines with a singe replace all. You have to remove the % character in the regular expression search string (= start of the line) if it not really works with your version of UE. Or you create a submacro for the find/replace command only which runs the replace in a loop until IfNotFound is true. I will help you with the bug workaround macros if this macro does not work correctly with your version of UE.

InsertMode
ColumnModeOff
HexOff
UnixReOff
Clipboard 9
Bottom
IfColNum 1
Else
"
"
EndIf
Top
Loop
IfEof
ExitLoop
EndIf
SelectWord
StartSelect
Copy
EndSelect
Key HOME
Key DOWN ARROW
Find RegExp "%^c;*^p"
Replace All ""
EndLoop
ClearClipboard
Clipboard 0

Add UnixReOn or PerlReOn (v12+ of UE) at the end of the macro if you do not use UltraEdit style expressions by default - see search configuration. Macro command UnixReOff sets the regular expression option to UltraEdit style. This job can be done only with an UltraEdit style regular expression without a really big workaround.
User avatar
Mofi
Grand Master
Grand Master
 
Posts: 4064
Joined: Thu Jul 29, 2004 11:00 pm
Location: Vienna

Re: Delete line with partially duplicate content

Postby jrpm » Thu Apr 06, 2006 7:59 am

Thank you, it worked!
User avatar
jrpm
Newbie
 
Posts: 2
Joined: Tue Apr 04, 2006 11:00 pm

Re: Delete line with partially duplicate content

Postby Hownow » Wed Nov 29, 2006 9:58 pm

Mofi,
Thank you contributing this code. It makes sense but when I run within UE 12.2, it deletes the entire file. It seems the problem is the Replace All "" command which seems to wrap around the file. I have the parameter "Continue find at End of File" in my preferences unchecked.
I did a Macro Quick Record and within my Find & Replace dialog varied the function once with a check in "Replace All is From Top of File" which replicated the problem with the Macro and another time with out the check and that worked predictably. But if you look at the code generated by the quick record command there is nothing to differentiate the two functions:

Code: Select all
InsertMode
ColumnModeOff
HexOff
UnixReOff
Find RegExp "%^c|*^p"
Replace All ""
StartSelect
Copy
Find RegExp "%^c|*^p"
Replace All ""

Thank you
User avatar
Hownow
Newbie
 
Posts: 5
Joined: Thu Apr 20, 2006 11:00 pm

Re: Delete line with partially duplicate content

Postby Mofi » Thu Nov 30, 2006 7:58 am

This also happens with UE v11.20b. Reason: option Replace All is From Top of File is a replace dialog only option which is not available as macro command parameter. But the option from the replace dialog is active also while running a macro which should not be.

You should report this issue by email to IDM support. The replace option Replace All is From Top of File should be ignored when a replace all from within a macro is executed.

It's clear that the macro with this option active will produce an empty file. The macro sets the cursor once to top of the file before the loop and then runs the replaces in the loop linewise until end of file is reached. With this option the cursor is set within the loop always to top of the file and so the loop will only exit when everything is deleted. I personally never check Replace All is From Top of File and so I did not notice this bad effect before your post.
User avatar
Mofi
Grand Master
Grand Master
 
Posts: 4064
Joined: Thu Jul 29, 2004 11:00 pm
Location: Vienna

Re: Delete line with partially duplicate content

Postby Hownow » Thu Nov 30, 2006 9:01 am

Thank you Mofi, I have notified UE support.
Do you have any other coding ideas on how I could eliminate duplicate records with a common cust number in the first field?
Thank you
User avatar
Hownow
Newbie
 
Posts: 5
Joined: Thu Apr 20, 2006 11:00 pm

Re: Delete line with partially duplicate content

Postby Mofi » Thu Nov 30, 2006 9:50 am

Same macro as above without replace all command and so much slower and more complicated, but independent now from the special replace all option. The replace is now executed one by one in the loop. A bookmark is used to go back to initial start position. So the macro first clears all bookmarks before it really starts.

The macro property Continue if a Find with Replace not found must be checked for this macro.

InsertMode
ColumnModeOff
HexOff
UnixReOff
Clipboard 9
Bottom
IfColNum 1
Else
"
"
EndIf
Loop
PreviousBookmark
IfEof
ExitLoop
Else
ToggleBookmark
Bottom
EndIf
EndLoop
Top
SelectWord
StartSelect
Copy
EndSelect
Key HOME
ToggleBookmark
Key DOWN ARROW
Loop
Find RegExp "%^c|*^p"
IfFound
Delete
Else
PreviousBookmark
ToggleBookmark
Key DOWN ARROW
IfEof
ExitLoop
EndIf
SelectWord
StartSelect
Copy
EndSelect
Key HOME
ToggleBookmark
Key DOWN ARROW
EndIf
EndLoop
ClearClipboard
Clipboard 0
User avatar
Mofi
Grand Master
Grand Master
 
Posts: 4064
Joined: Thu Jul 29, 2004 11:00 pm
Location: Vienna


Return to Macros