On 05/28/2018, at 11:59, fgf <ga...@jacqcad.com <mailto:ga...@jacqcad.com>> 
wrote:
> I have a very large file (a 20 MB Thunderbird .mbox mail file) which contains 
> many base64 sections interleaved in the text.  
> 
> I want to decode in-line the base64 sections back into readable text while 
> keeping the non-base64 text.
> 
> I made a Find pattern to select the base64 sections:


Hey There,

You could do something like this with AppleScript.

----------------------------------------------------------------
# Auth: Christopher Stone
# dCre: 2018/05/29 15:00
# dMod: 2018/05/29 15:00 
# Appl: BBEdit
# Task: Decode Base64 Segments in front document.
# Libs: None
# Osax: None
# Tags: @Applescript, @Script, @BBEdit, @Decode, @Base64, @Segments, @Front, 
@Document
----------------------------------------------------------------

set itemFound to true

tell application "BBEdit"
    tell front text window's text
        
        select insertion point before character 1
        
        repeat while itemFound
            set findRecord to find "(^[0-9a-zA-z+/]{76}\\r)+.*\\r" options 
{search mode:grep, case sensitive:false}
            
            if found of findRecord ≠ true then
                set itemFound to false
            else
                select found object of findRecord
                set dataStr to contents of text of found object of findRecord
                set decodedStr to decodeBase64(dataStr) of me
                if decodedStr ≠ dataStr then set contents of selection to 
decodedStr
            end if
            
        end repeat
        
    end tell
end tell

----------------------------------------------------------------
--» HANDLERS
----------------------------------------------------------------
on decodeBase64(dataStr)
    set shCMD to "
                base64 -D <<< " & quoted form of dataStr
    do shell script shCMD
end decodeBase64
----------------------------------------------------------------

It will take your regex pattern, find the next match, transform it, and repeat 
until done.

You can run it from the Apple Script Editor.app, or BBEdit's script menu.

On a 20 MB file it will probably take quite a while to run.

I am concerned that some of your base64 blocks will be embedded images or 
files, so you may end up with some gibberish in the decoded material.


If I was doing this on any regular basis I'd take a careful look at this:

https://perldoc.perl.org/MIME/Base64.html 
<https://perldoc.perl.org/MIME/Base64.html>

It works well for simple cases, unfortunately I don't know offhand how to make 
it work in a big file with interspersed base64 sections.

Even so – someone has done this job before – and some research ought to bear 
fruit.

--
Best Regards,
Chris

-- 
This is the BBEdit Talk public discussion group. If you have a 
feature request or would like to report a problem, please email
"supp...@barebones.com" rather than posting to the group.
Follow @bbedit on Twitter: <http://www.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 bbedit+unsubscr...@googlegroups.com.
To post to this group, send email to bbedit@googlegroups.com.
Visit this group at https://groups.google.com/group/bbedit.

Reply via email to