Hi Christopher
first, sorry for the delay.
This is AmAzIng ! I'll use it. I'm impressed.
Thank you very much. If trouble i'll ask for sure ! ;) 
gabriel 

Le samedi 19 décembre 2020 à 16:31:55 UTC+1, [email protected] a écrit :

> On 12/17/2020, at 08:07, Gabriel <[email protected]> wrote:
>
> I just discovered BBEdit.
>
> ------------------------------
>
> Hey Gabriel,
>
> Ah, so you've found some treasure – eh?  ;-)
>
> From a text document that contains n lines, select the first whole line, 
> copy it into a new document, then the next one, until the end of the 
> document (if I have 50 lines, I would have 50 new text files).
>
>
> Fifty, huh?  We'll get to this in a minute.
>
> I started to explore the possibilities of "grep", with these commands: 
> ^.*
> But I can't get the selection to stop at the end of the line, despite many 
> tries.
>
>
> Regular Expressions are tricky, although BBEdit supports PCRE – and that's 
> pretty much the gold standard.
>
> ^.+$
>
> ^  == Beginning of line
> .  == One character
> +  == Or more
> $  == End of line
>
> Make sure you turn on the ‘Grep’ checkbox in the BBEdit Find Dialog.
>
> But – this doesn't get us anywhere in the automation phase of things...
>
> Ideally I'd like to be able to save these documents with the content of 
> the line itself as filename, but let's say it's a second step (and I don't 
> even know if it's possible). 
>
>
> Okay, here's a completely BBEdit-Centric method using AppleScript:
>
> --------------------------------------------------------
> # Auth: Christopher Stone
> # dCre: 2020/12/19 07:34
> # dMod: 2020/12/19 07:34 
> # Appl: BBEdit
> # Task: Create Files in the Finder from Lines in the Front Document.
> # Libs: None
> # Osax: None
> # Tags: @Applescript, @Script, @BBEdit, @Create, @Files, @Finder
> --------------------------------------------------------
>
> *set* savePath *to* *path to* *downloads folder* as *text*
>
> *tell* *application* "BBEdit"
>
>     
>     *tell* *front* *text window*
>
>         
>         *if* *number* *of* *characters* ≠ 0 *then*
>
>             
>             *set* lineList *to* contents *of* *its* *lines* *where* 
> contents *is* *not* ""
>
>             
>         *else*
>
>             
>             *error* "The front window doesn't contain any text!"
>
>             
>         *end* *if*
>     *end* *tell*
>
>     
>     *repeat* *with* i *in* lineList
>
>         
>         # You can remove ‘bounds’ if you don't care about window position 
> and size.
>         *make* new *document* with properties {contents:i, bounds:{430, 
> 45, 1390, 1196}}
>         *save* *front* *document* to (savePath & i & ".txt")
>
>         
>         # Close the new document if desired.
>         # close front document
>
>         
>     *end* *repeat*
>
>     
> *end* *tell*
>
> --------------------------------------------------------
>
> Unlike Christian's script I'm saving the files in the Finder as I make 
> them.
>
> The drawback of this method is that it's a bit slow, and the more files 
> you create the slower it'll be.
>
> So let's do something about that.
>
> The following script is more intimidating looking than the first one, 
> because it has a couple of complicated looking handlers.  One is for 
> reporting errors, and the other is for writing the files in the Finder.
>
> The main part of the script is all too simple.
>
> Instead of having BBEdit open each new document, populate it, and write 
> the file – I'm scraping the lines of the front document and then writing 
> the files directly with AppleScript, and this is fast as lightning.
>
> Fifty files get written in less than 1/2 a second even on my old Mid-2010 
> 17" MacBook Pro.
>
> And *yes* they use the contents of the line for the file name.
>
> --------------------------------------------------------
> # Auth: Christopher Stone
> # dCre: 2020/12/19 07:34
> # dMod: 2020/12/19 08:58
> # Appl: BBEdit
> # Task: Create Files in the Finder from Lines in the Front Document.
> # Libs: None
> # Osax: None
> # Tags: @Applescript, @Script, @BBEdit, @Create, @Write, @Files, @Finder
> --------------------------------------------------------
>
> *try*
>
>     
>     *set* savePath *to* *path to* *downloads folder* as *text*
>
>     
>     *tell* *application* "BBEdit"
>         *tell* *front* *text window* *to* *set* lineList *to* contents 
> *of* *its* *lines* *where* contents *is* *not* ""
>     *end* *tell*
>
>     
>     *repeat* *with* i *in* lineList
>         writeUTF8(i, savePath & i & ".txt")
>     *end* *repeat*
>
>     
>     *set* shCMD *to* "
>         osascript -e 'display notification \"Finished!\" with title 
> \"BBEdit\" subtitle \"Write Files Script\" sound name \"Tink\"'
>     "
>     *do shell script* shCMD
>
>     
> *on* *error* errMsg number errNum
>     stdErr(errMsg, errNum, *true*, *true*) *of* *me*
> *end* *try*
>
> --------------------------------------------------------
> --» HANDLERS
> --------------------------------------------------------
> *on* stdErr(errMsg, errNum, beepFlag, ddFlag)
>     *set* errMsg *to* errMsg & return & return & "Num: " & errNum
>     *if* beepFlag = *true* *then*
>         *beep*
>     *end* *if*
>     *if* ddFlag = *true* *then*
>         *if* errNum ≠ -128 *then*
>             *try*
>                 *tell* *application* (*path to* *frontmost application* as 
> *text*) *to* *set* ddButton *to* button returned *of* ¬
>                     (*display dialog* errMsg with title "ERROR!" buttons 
> {"Copy 
> Error Message", "Cancel", "OK"} ¬
>                         default button "OK" giving up after 30)
>                 *if* ddButton = "Copy Error Message" *then* *set the 
> clipboard to* errMsg
>             *end* *try*
>         *end* *if*
>     *else*
>         *return* errMsg
>     *end* *if*
> *end* stdErr
> --------------------------------------------------------
> *on* writeUTF8(dataStr, targetFilePath)
>     *try*
>         *if* targetFilePath *starts with* "~/" *then*
>             *set* targetFilePath *to* POSIX path *of* (*path to* *home 
> folder* as *text*) & *text* 3 *thru* -1 *of* targetFilePath
>         *end* *if*
>         *set* fRef *to* *open for access* targetFilePath *with* write 
> permission
>         *set eof* *of* fRef to 0
>         *write* dataStr to fRef as «*class* utf8»
>         *close access* fRef
>
>         
>         *if* targetFilePath *contains* ":" *then*
>             *return* *alias* targetFilePath
>         *else* *if* targetFilePath *starts with* "/" *then*
>             *return* *alias* *POSIX file* targetFilePath
>         *end* *if*
>
>         
>     *on* *error* errMsg number errNum
>         *try*
>             *close access* fRef
>         *on* *error* errMsg number errNum
>             *error* "Error in writeUTF8() handler of library: gen.lib" & 
> return & return & errMsg
>         *end* *try*
>     *end* *try*
> *end* writeUTF8
> --------------------------------------------------------
>
> Let me know if you have any problems.
>
> --
> Best Regards,
> Chris
>
>

-- 
This is the BBEdit Talk public discussion group. If you have a feature request 
or need technical support, please email "[email protected]" rather than 
posting here. Follow @bbedit on Twitter: <https://twitter.com/bbedit>
--- 
You received this message because you are subscribed to the Google Groups 
"BBEdit Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/bbedit/e8aac2c7-f1f9-4a6b-84a0-3e1a68913680n%40googlegroups.com.

Reply via email to