I’ve got a variable that keeps a running list of recently created file names (created using another Macro), Each new entry is separated by a carriage return.
I have it set up so the most recent entry is at the top of the list, and I’d like older entries (at the end of the list) to drop off.
How can keep this variable to the last 20 entries? IE - the top 20 lines of text in the variable. I think the solution lies in the “Search Variable” but the expressions are new to me. I’d also be happy enough lopping off the end of the text by retaining the top 500 characters or so, but if I could crop by dropping the line at the bottom that would be neater.
Here's an example / proof-of-concept that should get you going.
Adapt as you need to for your needs.
Please let us know if this update works for you.
2017-08-31 16:07 CT
###I think Ver 2.0 will fix the issues noted in the below posts:
If the Source list has fewer lines than the max lines allowed, THEN ALL lines are retained.
The RegEx now allows any of these at the end of the line:
New Line \n
Return \r
End of String $
I suspect the "formatting" issue you referred to is that you had RETURN character rather than NEW LINE character at the end of some/all of your source data.
##Macro Library Get (Extract) Multiple Lines in Variable @Example
####DOWNLOAD:
<a class="attachment" href="/uploads/default/original/2X/b/b262ba655053bef263c80b87f7416c033b2398b4.kmmacros">Get (Extract) Multiple Lines in Variable @Example.kmmacros</a> (6.4 KB)
**Note: This Macro was uploaded in a DISABLED state. You must enable before it can be triggered.**
---
###Use Case
* Limit List to Max Number of Lines
---
###ReleaseNotes
Author.@JMichaelTX
**NOTICE: This macro/script is just an _Example_**
* It is provided only for _educational purposes_, and may not be suitable for any specific purpose.
* It has had very limited testing.
* You need to test further before using in a production environment.
* It does not have extensive error checking/handling.
* It may not be complete. It is provided as an example to show you one approach to solving a problem.
**MACRO SETUP**
* **Carefully review the Release Notes and the Macro Actions**
* Make sure you understand what the Macro will do.
* You are responsible for running the Macro, not me. 😉
.
* Assign a Trigger to this maro.
* Move this macro to a Macro Group that is only Active when you need this Macro.
* ENABLE this Macro.
.
* **REVIEW/CHANGE THE FOLLOWING MACRO ACTIONS:**
* ALL Actions that are shown in the magenta color
**USE AT YOUR OWN RISK**
* While I have given this limited testing, and to the best of my knowledge it will do no harm, I cannot guarantee it.
* If you have any doubts or questions:
* **Ask first**
* Turn on the KM Debugger from the KM Status Menu, and step through the macro, making sure you understand what it is doing with each Action.
---
<img src="/uploads/default/original/2X/a/a3ecf9b75e6ddac8427e1ef9aaf1820c0e158b5c.png" width="498" height="1407">
Hmm, this seems to work great for smaller lists, but when I get over 9 the Macro fails. At first I thought it was because the list didn’t contain enough lines, but it turns out that isn’t the case. I can’t figure out why it fails on larger numbers but I’m still looking.
If it fails with specific data, post the specific data. Or even, paste the specific data into @JMichaelTX’s macro and verify that it fails and post that.
Its something to do with a text formatting issue I think. If I paste these lines first into the macro directly, it will fail. However if I copy and paste them BACK from this form I’m entering this into, it works. In other words this text I’ve pasted above DID fail when I pasted it into the Macro. But then I pasted in here, and for some reason thought I’d try selecting it BACK here form this form and then pasting it into the Macro, and it works. So this will not fail for you if you copy and paste it from here.
I’ve gone back and forth a bit with some lines trying to remove text formatting with partial success, but I guess I need a way to strip any formatting out of the text is being parsed if that is indeed the issue.
I also get the same error I get if I enter a number that is larger than the number of lines. Example - 12 lines of text and I ask it to strip the first 20 I get the same error.
Normally I’m asking it to strip something like the first 5 lines, with 12 or so lines of text to work with.
Right, I was surprised when you said “when I get over 9 the Macro fails”.
The regex, as written, would fail to match anything less than the specified number of lines. Currently the regex matches exactly the specified number of lines, so if the source has less than that, it would fail.
Change the section in {} to be {0,%Variable%GLV_NumOfLinesToGet%}. That will match up to that many lines.
With that change, your input data works with GLV_NumOfLinesToGet set to 2 or 4 or 12 in my tests (so numbers smaller or larger than the number of lines).
If you find a case that still fails, post the number and the data.
Thanks for the continued interest. I’m still getting fails, with the first being an empty list (dropping everything) when using {0,%Variable%GLV_NumOfLinesToGet%}. But lets not worry about that - I can disable the fails when the number is wrong. The bigger issue remains, and is still something to do with the list’s text formatting - I think.
When I paste lists in here (in this forum reply), it loses some formatting that is causing me trouble. So the only way I know I can replicate this over the web for other people is for you to run this applescript (please forgive the sloppy code - I’m not a programmer and just squeak by). Run this, and select a folder, then paste the results as the list to parse. Thats where I get fails consistently.
Now - if I take the results of this applecsript and paste it into a fresh textedit document, then turn that into plain text, THEN copy that plain text and paste into the list source, the macro works. So there’s SOMETHING in my list thats tripping up the macro.
(from QK)
--file names
tell application "System Events"
activate
display dialog "This will prompt you to choose a folder, and it will copy the names of all the files in the folder you select to the clipboard." & return & return & "Please choose the top level folder of your library at the next prompt." with icon 1
set x to choose folder with prompt "Please select your top level library folder......"
tell application "Finder"
set fn to the name of every file of folder x as list
end tell
set AppleScript's text item delimiters to ""
set nn to ""
repeat with i in fn
set i to i as text
set nn to nn & i & return
end repeat
set nn to nn as Unicode text
activate
set the clipboard to nn
activate
display dialog "File names copied to the clipboard." with icon 1
return nn
end tell
I can’t spend much time looking at this today. FWIW I did make a workaround with applescript that is doing the job, but I would like to get to the bottom of this inside KM as I’m sure it can do it.
FYI the display is odd on the web pasting in this applescript code.