Application Development Blog Posts
Learn and share on deeper, cross technology development topics such as integration and connectivity, automation, cloud extensibility, developing at scale, and security.
cancel
Showing results for 
Search instead for 
Did you mean: 
joachimrees1
Active Contributor
tl;dr : regexes are hard.
My half-solution: search for \R and either click "find next" or "replace (with space)".

I can't remember exactly (do help me out in the comments!), but someone said something along the lines of: "If you have a problem, go use regular expressions. Then you have 2 problems!". And I think you have to start RegEx blogs with such a quote! (I didn't make the rules! 😉 )

So I have a problem or lets call it a wish: I want nice-looking method definitions, without unneeded line-breaks and without braking my fingers from manual editing.

Fortunately, I can look forward to SAP providing something to achieve that in the future, but I want it now.

Already when writing my questions, I though "well regular expressions should be able to do that, right?" . I'll show you how far I got, and am happy if together we can go even further.

So let's start with a example un-clean code:
    METHODS check_for_delivery_reference
RAISING
zclewm_cx_input_false.
METHODS check_is_available_stock_cat
RAISING
zclewm_cx_input_false.
METHODS check_todo_final_storage
RAISING
zclewm_cx_input_false.
METHODS check_for_open_wt.

METHODS do_something_xy
IMPORTING
iv_param TYPE abap_bool.

Please note, this time, it's only about the line breaks: I want to remove some of them.

The logic is: if there is a line break, that is not preceded by a "." , remove that line break.
(note: "remove" can be also be spelled "replace with nothing (or with space)". )

So what do we need:

\R -> any newline character.
[] -> a character list [abc] means any one charter that is a b or c.
^ -> negation the character list [^abc] means any one charter that is neither a nor b nor c.

So this is what we search for:
[^.]\R

A character, that is anything but a ., followed by a newline.

So in theory, this should work, but actually, it does not really - there are some problems!
I try to keep it short, only mentioning 2 of them I do understand:

1. It will match what it says "a non-"." character, followed by a line break" - and AdT-search (or Notepad++) will highlight that, and make it available for replace / replace all.
But actually, that’s not what I want: I only want to replace the line break, NOT also the character preceding it.
*from this: 
METHODS check_for_delivery_reference
RAISING
*I want this:
METHODS check_for_delivery_reference RAISING

*not that (the last 'e' was also replaced)
METHODS check_for_delivery_referenc RAISING

2. I newline is also a non"."-character, so it will match a newline followed by a newline, no matter if there is a . in front of it or not.
(3. note sure: is [cr][lf] only one or two new-line characters? )

So, as often, it is not that easy.

What I ended up doing, to save me at least the [ mouse click+and+drag to highlight, + space to remove]cycle: is this: I just search for the line break \R an the via click wither replace it with space or "find next".

Conclusion:

While it is true that:
1. recurring manual tasks are annoying
and
2. a easy and save working automation/scripting is very rewarding

It is also true that:
0 a no-working or not-as-easy-as-thought automation is also very frustrating.
Take notice when you are going down that path and leave it as early as possible.

Do you have some regex-moments (good or bad) you want to share?

Best
Joachim
2 Comments