L
Leslie Viljoen
Hello!
Seeing the XML-like format one of the quiz posters used for sending in
his program, I wrote two programs that can embed and extract multiple
files from an email. I'll include the programs in their own format so
you can understand ;-)
Someone may have already done something like this, but if not, here you go.
I know of one problem - the uncruncher adds a blank line at the end of
the files it extracts, so someone might want to fix that.
<code>
<CRUNCHFILE: email_crunch.rb>
#/usr/bin/env ruby
# email_crunch
# usage: email_crunch.rb *.rb > crunchfile.txt
puts "<code>"
ARGV.each do |f|
next if FileTest.directory?(f)
puts "<CRUNCHFILE: #{f}>"
puts File.new(f).read
puts "</CRUNCHFILE: #{f}>"
end
puts "</code>"
</CRUNCHFILE: email_crunch.rb>
<CRUNCHFILE: email_uncrunch.rb>
#/usr/bin/env ruby
# email_uncrunch
# usage: cat crunch_file | email_uncrunch.rb
# or : email_uncrunch.rb crunch_file
require 'breakpoint'
if ARGV.length != 0
text = File.new(ARGV[0]).read
else
text = $stdin.read
end
text =~ /<code>(.*)<\/code>/m
code = $1
filename = ""
f = nil
code.each_line do |line|
line.chomp!
if line =~ /^<CRUNCHFILE: (.+?)>$/
filename = $1
puts "Creating #{filename}"
f = File.new(filename, "w")
elsif !filename.empty?
if line == "</CRUNCHFILE: #{filename}>"
f.close
filename = ""
else
f.puts(line)
end
end
end
</CRUNCHFILE: email_uncrunch.rb>
</code>
- Les
Seeing the XML-like format one of the quiz posters used for sending in
his program, I wrote two programs that can embed and extract multiple
files from an email. I'll include the programs in their own format so
you can understand ;-)
Someone may have already done something like this, but if not, here you go.
I know of one problem - the uncruncher adds a blank line at the end of
the files it extracts, so someone might want to fix that.
<code>
<CRUNCHFILE: email_crunch.rb>
#/usr/bin/env ruby
# email_crunch
# usage: email_crunch.rb *.rb > crunchfile.txt
puts "<code>"
ARGV.each do |f|
next if FileTest.directory?(f)
puts "<CRUNCHFILE: #{f}>"
puts File.new(f).read
puts "</CRUNCHFILE: #{f}>"
end
puts "</code>"
</CRUNCHFILE: email_crunch.rb>
<CRUNCHFILE: email_uncrunch.rb>
#/usr/bin/env ruby
# email_uncrunch
# usage: cat crunch_file | email_uncrunch.rb
# or : email_uncrunch.rb crunch_file
require 'breakpoint'
if ARGV.length != 0
text = File.new(ARGV[0]).read
else
text = $stdin.read
end
text =~ /<code>(.*)<\/code>/m
code = $1
filename = ""
f = nil
code.each_line do |line|
line.chomp!
if line =~ /^<CRUNCHFILE: (.+?)>$/
filename = $1
puts "Creating #{filename}"
f = File.new(filename, "w")
elsif !filename.empty?
if line == "</CRUNCHFILE: #{filename}>"
f.close
filename = ""
else
f.puts(line)
end
end
end
</CRUNCHFILE: email_uncrunch.rb>
</code>
- Les