Replace value according to previous line



  • Hi guys

    Im editing sfz (a music samples standard), and would need to edit that kind of thing :

    *<region> sample=Samples\Blister Pack5\Baghhopen.wav
    lokey=0
    hikey=0
    pitch_keycenter=60

    <region> sample=Samples\Blister Pack5\Bagsnes1.wav
    lokey=1
    hikey=1
    pitch_keycenter=60

    <region> sample=Samples\Blister Pack5\Bagsnes2.wav
    lokey=2
    hikey=2
    pitch_keycenter=60*

    etc etc (hundreds of values)
    What i need to do is knda simple i guess, i need the xx value for “pitch_keycenter=” to be set according to what previous line say (hikey=yy)
    In this case i would need to respectively set the “pitch_center” values, to 0,1 and 2.
    Is there a way to achieve this in np++ ?

    Thanks a million

    CHeers



  • Hello Emmanuel,

    Well, it’s easy enough to achieve that S/R !

    • Go back to the very beginning of your file

    • Open the Replace dialog and choose the Regular Expression search mode

    • In the SEARCH zone, type ((\d+)\Rpitch_keycenter=)\d+

    • In the REPLACE zone type \1\2

    • Click on the Replace All button

    Notes :

    • \d+ represents any number (one or more consecutive digits )

    • \R is any End of Line ( \r\n for a Windows file, \n for an Unix file or \r for an old Mac file

    • The regex (\d+)\Rpitch_keycenter= stands for the group 1, which is re-written, first, (\1), in replacement

    • The first regex \d+ is the group 2 ( the number at the end of the hikey line, before the EOL and pitch_keycenter ), which is re-written, last, (\2), in replacement


    You can either use that other regex syntax :

    SEARCH = (\d+)\Rpitch_keycenter=\K\d+

    REPLACE = \1

    Notes :

    • The regex engine tries to match the regex (\d+)\Rpitch_keycenter=, and \d+ is the group 1 ( the number at the end of the hikey line

    • Then, due to the \K form, the regex engine forget the previous match and tries, now, to match the remaining. That is to say, the simple regex \d+ ( the number, at end of the pitch_keycenter line )

    • This number is, finally, replaced by the value of group 1

    • DON’T use the step-by-step Replace button, with that second syntax

    Hope these regexes will be useful to you !

    Best Regards

    guy038



  • Wow, thank you very very much, guy038, you not only almost saved my life :), but you took the time to explain things extensively to me, thanks again !

    Cheers


Log in to reply